如何在类中添加另一个类中的数据

本文关键字:数据 另一个 添加 | 更新日期: 2023-09-27 18:09:30

我有一个像下面这样的类。我想为一个web服务发送一个这样的Messageformat,所以我需要为AttributecollectionInput添加值。

public class Messageformat
{
    public class Attributecollection
    {
        public string name { get; set; }
        public int id { get; set; }
    }
    public class Input
    {
        public string soid { get; set; }
        public string itemname { get; set; }
        public int qty { get; set; }
    }
    public class output
    {
        public string soid { get; set; }
    }
}

我想给这个类添加值。我一次只能调用一个类并向该类添加值。是否有任何方法调用类Messageformat并通过该对象向子类添加值。我知道这是一个嵌套的类结构。我不擅长oop,所以有人能分享一些关于这个的想法吗?

如何在类中添加另一个类中的数据

您应该使每个类单独定义。然后(WCF)您将能够创建您的DataContract并指定其数据成员-属性,您将在消息中发送的内容:

  [DataContract]
  public class Messageformat
  {    
     [DataMember]
     public Attributecollection prop1;
     [DataMember]
     public Input prop2;
     [DataMember]
     public output prop3;
  } 
  [DataContract]
  public class Attributecollection
  {
     [DataMember]
     public string name { get; set; }
     [DataMember]
     public int id { get; set; }
  }
  [DataContract]
  public class Input
  {
      [DataMember]
      public string soid { get; set; }
      [DataMember]
      public string itemname { get; set; }
      [DataMember]
      public int qty { get; set; }
  }
  [DataContract]
  public class output
  {
      [DataMember]
      public string soid { get; set; }
  }
然后你应该生成你的服务契约,在那里你可以使用你的类
  [ServiceContract]
  public interface IService
  {
     [OperationContract]
     SendMessage(Messageformat message);
  }

你的问题不是那么清楚,但是如果你问如何填充数据,你将不得不添加所谓的属性到你的父类。请注意,您不必使用内部类。

public class Attributecollection
{
    public string name { get; set; }
    public int id { get; set; }
}
public class Input
{
    public string soid { get; set; }
    public string itemname { get; set; }
    public int qty { get; set; }
}
public class output
{
    public string soid { get; set; }
}
public class Messageformat
{
    public Attributecollection MyAttributecollection { get; set; }
    public Input MyInput { get; set; }
    public output Myoutput { get; set; }
}
...
Messageformat test = new Messageformat
    {
        MyAttributecollection = new Attributecollection { name = "", id = 1 },
        MyInput = new Input { soid = "", itemname ="", qty = 1 },
        Myoutput = new output { soid = "" }
    };

从外观/声音来看,您需要一个类的实例来公开其他类的属性:

public class Messageformat {
  public MessageFormat() {
    Attributes = new Attributecollection();
    Input = new Input();
    Output = new output();
  }
  public Attributecollection Attributes { get; set; }
  public Input Input { get; set; }
  public output Output { get; set; }
}
public class Attributecollection {
  public string name { get; set; }
  public int id { get; set; }
}
public class Input {
  public string soid { get; set; }
  public string itemname { get; set; }
  public int qty { get; set; }
}
public class output {
  public string soid { get; set; }
}

那么你可以这样做:

var format = new MessageFormat();
format.Input.soid = "something";
format.Input.itemname = "something";

以此类推。当然,这里还有很多需要改进的地方,但你已经知道了。

你为什么要这样做?而不是嵌套你的类,在同一层声明你的类,并在其他类的MessageFormat内创建属性,即

  public class Messageformat
  {
     public Attributecollection AtrributeCollection{get;set;}
     public Input Input{get;set;}
     public output Output{get;set;}
  }
  public class Attributecollection
  {
     public string name { get; set; }
     public int id { get; set; }
  }
  public class Input
  {
     public string soid { get; set; }
     public string itemname { get; set; }
     public int qty { get; set; }
  }
  public class output
  {
     public string soid { get; set; }
  }

这样,你可以很容易地创建一个MessageFormat的对象,并插入所有其他三个类的数据,例如

  [WebMethod]
  public string GetMessage()
  {
        Messageformat msgFrmt = new Messageformat();
        msgFrmt.AtrributeCollection = new Atrributecollection()
                                         { 
                                             name="test",
                                             id=1
                                         };
        msgFrmt.Input = new Input()
                            {
                               soid= "soid value",
                               itemname="item",
                               qty=10
                            };
        msgFrmt.Output = new output()
                             {
                                soid="soid value"
                             };
        return new JavaScriptSerializer().Serialize(msgFrmt);
  }
上面的

是一个简单的例子,说明如何组织类并将它们用于任何目的。(上面是一个webmethod的例子,但你可以做任何你想做的)

为什么不把内部类和它的属性设置为static在它的访问级别中像这样:

 class MessageFormat
 {
    public static class Attributecollection
    {
        public static string name { get; set; }
        public static int id { get; set; }
    }
    public static class Input
    {
        public static string soid { get; set; }
        public static string itemname { get; set; }
        public static int qty { get; set; }
    }
    public static class output
    {
        public static string soid { get; set; }
    }
 }

然后你可以访问内部类,尽管没有实例化:

  MessageFormat.Attributecollection.id = 1;
  MessageFormat.Attributecollection.name = "test";
  MessageFormat.Input.itemname = "Soda";
  MessageFormat.Input.qty = 10;

尽管它违背了嵌套类的目的,因为嵌套类的内部类应该只能由外部类或父类访问。但是根据你的要求,这个代码将满足那个要求。

相关文章: