我知道,現在在C#3.0中,我們可以使用動態關鍵字在運行時添加/刪除屬性,如Object作爲一般容器的JavaScript概念,但我有一個問題。動態關鍵字與ExpandoObject附加和刪除屬性
是不是真的擴大了我想要的類型的對象?
例如: 我們有類:
class Person
{
public string Name { get; set; }
public int Age { get; set;}
}
我將創建一個從Person類一個新的對象:
dynamic p = new ExpandoObject();
現在是該對象確實類Person的對象?它不再與Person類有關?
Console.WriteLine(p.GetType()); // System.Dynamic.ExpandoObject
現在我要爲屬性設置的值,並擴大與新的屬性「富」的對象號碼:
p.Age = 25;
p.Foo = "foo";
我連着財產「時代」的新屬性「富」和設定值,但我做的對於System.Dynamic.ExpandoObject
類型的對象不Person
型的,所以我有錯配的這一部分,是我真正從我所需要的類型展開對象,我可以用投來指代對象類型這樣的:
Console.WriteLine(((Person)p).Name);
型 「Microsoft.CSharp.RuntimeBinder.RuntimeBinderException」未處理的異常發生在 System.Core.dll
但它不是'Person' ....它是'ExpandoObject'。僅僅因爲兩個類具有相同的屬性並不能使它們相同。 C#是一種強類型語言。如果你想要一個'人',你爲什麼不創建一個'人'? – Liam
@Liam如果我想將新屬性附加到Person的對象,那麼我想用它作爲Person類型屬性? – Marzouk
那你不行?如果你添加一個屬性給一個人,它不再是一個人了。你可以在Js中,但是Js不是強類型語言 – Liam