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

时间:2013-04-17 08:03:46

标签: c# oop class

我有一个类如下。我想为一个网络服务发送一个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并通过该对象向子类添加值。我知道它是一个嵌套的类结构。我不是很好,所以有人可以分享一些想法吗?

5 个答案:

答案 0 :(得分:1)

你为什么这样做?不是嵌套类,而是在同一级别声明类,并在其他类的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的Object并插入所有其他三个类的数据,即

  [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的例子,但你可以做任何你想做的事情)

答案 1 :(得分:1)

您的问题不是很明确,但如果您要问如何填充数据,则必须将所谓的属性添加到您的父类。请注意,您不必使用内部类。

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 = "" }
    };

答案 2 :(得分:1)

您应该将每个类分开以进行定义。然后(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);
  }

答案 3 :(得分:1)

从它的外观/声音中,你想要一个暴露其他类属性的类的实例:

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";

等等。在那里,有很多改进可以肯定,但是你有它。

答案 4 :(得分:1)

为什么不在其访问级别中创建内部类及其属性 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;

虽然它违背了嵌套类的目的,因为据说嵌套类的内部类只能由外部类或父类访问。但根据您的要求,此代码将满足该要求。