是否有可能通過字符串變量初始化一個類?我的語法如下:從字符串變量如何類初始化是可能的
string sClassContainer="
class a
{
Property1;
Property2;
}"
如何在c#中執行此操作?
是否有可能通過字符串變量初始化一個類?我的語法如下:從字符串變量如何類初始化是可能的
string sClassContainer="
class a
{
Property1;
Property2;
}"
如何在c#中執行此操作?
是的,你可以,但它幾乎沒用。即使使用舊的.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
)
在你的例子中,你創建了一個特定的對象,而不是特定的類型。 –
@SaeedAmiri我認爲這是鴨子打字。 「當我看到一隻像鴨子一樣走路的鴨子,像鴨子一樣游泳,像鴨子一樣呱呱叫,我把那隻鳥叫做鴨子。」(http://en.wikipedia.org/wiki/Duck_typing)。 – xanatos
:)))非常有趣我從來沒有聽說過:)))。但我認爲不是這樣,因爲類型可以使用太多次,如果樣本是OP想要的(事實上)你是對的,但是否則它不是鴨子:) –
字符串的格式是什麼?您可能別無選擇,只能解析它並立即創建一個類。班級定義是否已知? – SliverNinja
你的意思是你想以某種方式實例化在字符串「sClassContainer」中定義的類「a」?有些東西是嗎?:'var instanceOfA = MyClassGenerator.CreateInstance(sClassContainer);'我想我明白你在問什麼,但不知道它是否可能。 – Kjartan
這段代碼的目的究竟是什麼?如果你有一些特定的任務需要解決,也許還有其他更簡單的方法來完成它。 – Kjartan