C#-如何从静态对象创建动态对象
本文关键字:对象 创建 动态 静态 C#- | 更新日期: 2023-09-27 17:59:05
假设有一个类型为A
的静态对象。
class A
{
public string b;
public int c;
public bool d;
public A e;
.
.
.
}
A a = new A(){
b = "string",
c = 12,
d = true
e = new A(){
b = "another string",
c = 23
}
};
我想deep将此对象克隆到具有其所有属性的dynamic
对象中。
我会枚举对象的属性(a.GetType().GetProperties()),在内置类型、结构和类之间指定目标,并使用ExpandoObject来构建动态对象。
最简单的方法是将类序列化为json并将其反序列化为动态对象。
使用Json.net:
A a = new A()
{
b = "string",
c = 12,
d = true,
e = new A()
{
b = "another string",
c = 23
}
};
var json = JsonConvert.SerializeObject(a); // create a json
dynamic newObj = JsonConvert.DeserializeObject(json);// create a dynamic object
构建一个复制构造函数:
class A //<-- this class is static?????
{
public string b;
public int c;
public bool d;
public A e;
public A() { } // add default constructor
public A(A a){
b = a.b;
c = a.c;
d = a.d;
if ( a.e != null ) {
e = new A(a.e);
}
}
}
在C#4.0中,我们有动态的概念,但如何从静态对象创建动态对象?
下面的代码将在运行时生成异常。动态对象来自C#类,但它可以是通过动态语言运行时(DLR)来自其他语言的对象。重点不是如何调用静态方法,而是如何调用C#代码中无法创建的动态对象的静态方法。
Foo类{公共静态int Sum(int x,int y){返回x+y;}}
班级计划{
static void Main(string[] args)
{
dynamic d = new Foo();
Console.WriteLine(d.Sum(1, 3));
}
}
动态类型是作为C#和其他编程语言之间的桥梁而发明的。还有一些其他语言(例如Java)允许通过对象而不是类型调用静态方法。
有关详细信息,请访问在此处输入链接描述