2012-02-17 35 views
-1

我想在運行時按照用戶需求來創建我們可以在運行時創建自動獲取和設置屬性嗎?

public object Value { get; set; } 

public Type Type { get; set; } 

public string Name { get; set; } 

public string "user has to give propertyname" {get;set;} 

。是否有可能在Csharp中使用Expandos或Dynamics做到這一點。 我問,如果我想在運行時設置屬性名稱行

公共字符串「用戶必須給屬性名」{獲取;設置;}。它必須來自xml r sql但我想設置屬性名稱在運行。

+1

你可能會有什麼需求,你認爲你需要這個? – Steven 2012-02-17 07:03:27

+0

先生我問,如果我想在運行時設置屬性名稱公共字符串「用戶必須提供屬性名稱」{獲取;設置;} – 2012-02-17 07:24:56

+1

是的,但是你想要解決什麼問題? – Steven 2012-02-17 07:28:39

回答

0

我不知道你問什麼,但expandos的,你可以做到以下幾點:

 dynamic d = new ExpandoObject(); 
     d.Name = "MyNameIsTest"; 
     d.Age = 26; 
     d.Weight = 62.5d; 
     d.dosomethingforme = "blablabla ...."; 
     d.GreetMe = new Action(delegate() 
     { 
      Console.WriteLine("Hello {0}", d.Name); 
     }); 

和地方在你的代碼,你可以有這樣的事情:

public void ResolveDynamic(dynamic obj) 
    { 
     Console.WriteLine(obj.Name); 
     obj.Name = "Now I got a new name"; 

     Console.WriteLine(obj.dosomethingforme); 

     obj.GreetMe(); 
    } 

所以如果你調用這個函數,你會看到以下內容!

MyNameIsTest

blablabla ....

你好現在,我有了個新名字

我希望你可以開始與這個東西!

乾杯!

+0

這個答案與我的問題沒有關係。再次閱讀我的問題。 – 2012-02-17 09:41:48

+0

所以如果你的意思是你想在運行時改變現有對象的屬性名稱,那麼我猜這是不可能的! – Gohlool 2012-02-17 09:53:42

+0

這給了我錯誤..如何解決這個... class nameex { public object call() { {0}動態expando = new ExpandoObject(); var p = expando作爲IDictionary ; p [「Demo」] =「New val 1」; } } class de {dynamic n = new nameex(); x.call(); n.Demo = 10; Console.WriteLine(n.Demo); – 2012-02-20 07:52:04

0

如果你想添加一個屬性,使得Reflection會給你,那是不可能的。一旦編寫了一個類,就沒有辦法向它添加成員。如果你只是想能夠設置和獲得財產,但是,這是Expando的目的,它會自動做到這一點。

+0

你可以解釋一下,如何創建這樣的程序 – 2012-02-20 04:21:47

+0

恐怕我不明白你想讓你的程序做什麼,所以我不能解釋如何創建一個程序來做到這一點。 – Gabe 2012-02-20 06:30:24

+0

class {dynamic n = new nameex(); nameex x = new nameex(); x.call(); n.Demo = 10; Console.WriteLine(n.Demo); }類名稱ex{public object call() { dynamico = new ExpandoObject(); var p = expando作爲IDictionary ; p [「Demo」] =「New val 1」; } }這給了我錯誤..如何解決這個問題 – 2012-02-20 07:41:58

相關問題