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对象中。

C#-如何从静态对象创建动态对象

我会枚举对象的属性(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)允许通过对象而不是类型调用静态方法。

有关详细信息,请访问在此处输入链接描述