簡體   English   中英

C# - 如何從靜態對象創建動態對象?

[英]C# - How to create a dynamic object from a static object?

假設有一個類型為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
        }
};

我想將此對象深度克隆到具有其所有屬性的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#代碼中創建的動態對象的靜態方法。

class Foo {public static int Sum(int x,int y){return x + y; }}

課程{

static void Main(string[] args)
{
    dynamic d = new Foo();
    Console.WriteLine(d.Sum(1, 3));

}

}

動態類型被發明為C#和其他編程語言之間的橋梁。 還有一些其他語言(例如Java)允許通過對象而不是類型來調用靜態方法。

有關詳細信息,請訪問此處輸入鏈接說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM