我正在寻找类似于目标c中的'id'类型的实现,该实现在运行时可以是任何类型。是否可以在c#中实现?
让我解释一下我的要求
id abc;// a common type which can hold any object during runtime
if(cond1)
{
Option1 opt1 = new Option1();//opt1 is an object of user defined class Option1
abc = opt1;
}
else if(cond2)
{
Option2 opt2 = new Option2();
abc = opt2;
}
...
我该如何在c#中执行相同操作?
谢谢,
尼基
最佳答案
您可以通过两种方式执行此操作:
首先,您可以将类型声明为object
。这将允许您为该类型分配任何内容。但是请注意,如果将值类型分配给对象引用,则将其装箱。
例如:
object abc;
if(cond1)
{
Option1 opt1 = new Option1();//opt1 is an object of user defined class Option1
// Assignment works, but you can't call a method or prop. defined on Option1
abc = opt1;
} // ...
需要C#4的第二个选项是将其声明为
dynamic
。这将允许您实际上在对象上调用方法和属性,就好像它是“真实”类型一样。如果该方法调用不存在,则它将在运行时失败,但在编译时成功。例如:
dynamic abc;
if(cond1)
{
Option1 opt1 = new Option1();//opt1 is an object of user defined class Option1
// Assignment works
abc = opt1;
// This will work if Option1 has a method Option1Method()!
// If not, it will raise an exception at run time...
abc.Option1Method();
} // ...