日期:2014-05-18  浏览次数:20908 次

动态类型问题
有两个类型
Class1和Class2,这两个类型有些相同的属性

有两个方法
GetClass1()返回Class1,
GetClass2()返回Class2

现在有个变量model,
我想这样
var model=GetClass1()??GetClass2();

既当GetClass1()返回null是给model赋值Class2()

但这样写VS2010报错;

我知道一种解决方法,写一个基类Class1和Class2都继承该基类,model的类型就是该基类。但我不想这么麻烦。

请问利用动态类型如何实现?


------解决方案--------------------
其实你是??语法的问题
这样写肯定没问题:
var model=(object)GetClass1()??(object)GetClass2();
都封装到object中去,只不过使用的时候要转换到具体类型上的时候,要稍加判断下。

另外可以使用.NET4.0的dynamic来处理。
------解决方案--------------------
不可以。很多人觉得var是弱类型(受javascript影响),其实var只是语法糖,简化你书写具体类型。

因此var指定的类型是确定的。
var a = 1; //相当于 int a = 1;
var b = "1"; //相当于 string b = "1";两个var不同。
b = a; //错误,类型不同。

------解决方案--------------------
var model=GetClass1()??GetClass2();
咱先假设这种做法是对的,按照你的设计,Class1和Class2是没有关系的.
那么你下面的代码怎么写?
model.Func1()
编译器在编译的时候怎么知道你这个东西是什么.

dynamic是一种办法,但绝对不是正常的解决办法.正常的解决办法还是从设计层面去解决问题,而不是利用语言的特性来取巧.