如何在类中添加另一个类中的数据
本文关键字:数据 另一个 添加 | 更新日期: 2023-09-27 18:09:30
我有一个像下面这样的类。我想为一个web服务发送一个这样的Messageformat
,所以我需要为Attributecollection
和Input
添加值。
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;
尽管它违背了嵌套类的目的,因为嵌套类的内部类应该只能由外部类或父类访问。但是根据你的要求,这个代码将满足那个要求。