2011-10-27 61 views
1

是否有可能通過字符串變量初始化一個類?我的語法如下:從字符串變量如何類初始化是可能的

string sClassContainer=" 
class a 
{ 
    Property1; 
    Property2; 
}" 

如何在c#中執行此操作?

+0

字符串的格式是什麼?您可能別無選擇,只能解析它並立即創建一個類。班級定義是否已知? – SliverNinja

+0

你的意思是你想以某種方式實例化在字符串「sClassContainer」中定義的類「a」?有些東西是嗎?:'var instanceOfA = MyClassGenerator.CreateInstance(sClassContainer);'我想我明白你在問什麼,但不知道它是否可能。 – Kjartan

+1

這段代碼的目的究竟是什麼?如果你有一些特定的任務需要解決,也許還有其他更簡單的方法來完成它。 – Kjartan

回答

0

是的,你可以,但它幾乎沒用。即使使用舊的.NET版本,你也可以使用How to programmatically compile code using C# compiler ...但是呢?你只能通過反射來使用它(技術上,如果你的「新」類實現了一個接口或者覆蓋基類的一些虛擬方法,那麼你可以通過反射創建它並通過接口/基類使用它)。在這裏看到一個完整的例子Is it possible to dynamically compile and execute C# code fragments?

我會在C#4.0中添加您可以使用dynamic創建「動態」「類」。

dynamic myObj = new ExpandoObject(); 
myObj.Prop1 = "Hello"; 
myObj["Prop2"] = "World. Today is "; 
string myPropName = "Prop3"; 
myObj[myPropName] = DateTime.Now; 

(如SaeedAmiri與dynamic注意到我沒有創建一個類,我創建一個動態的對象。在這種情況下,「類」就意味着Duck Typing「類」。所以,如果你創建一個動態對象那麼有WalkLikeADuck的字段,那麼任何需要WalkLikeADuck的人都可以使用它,即使對象不是真的是Duck

+0

在你的例子中,你創建了一個特定的對象,而不是特定的類型。 –

+0

@SaeedAmiri我認爲這是鴨子打字。 「當我看到一隻像鴨子一樣走路的鴨子,像鴨子一樣游泳,像鴨子一樣呱呱叫,我把那隻鳥叫做鴨子。」(http://en.wikipedia.org/wiki/Duck_typing)。 – xanatos

+0

:)))非常有趣我從來沒有聽說過:)))。但我認爲不是這樣,因爲類型可以使用太多次,如果樣本是OP想要的(事實上)你是對的,但是否則它不是鴨子:) –