sco*_*obi 3 c# type-conversion
鉴于这样的几种类型:
interface I {}
class C : I {}
Run Code Online (Sandbox Code Playgroud)
如何进行静态类型转换?我的意思是:我如何以在编译时检查的方式更改其类型?
在C++中你可以做到static_cast<I*>(c).在C#中,我能做的最好是创建备用类型的临时变量并尝试分配它:
var c = new C();
I i = c; // statically checked
Run Code Online (Sandbox Code Playgroud)
但是这会阻止流畅的编程.我必须创建一个新的变量来进行类型检查.所以我已经确定了这样的事情:
class C : I
{
public I I { get { return this; } }
}
Run Code Online (Sandbox Code Playgroud)
现在我可以静态转换C到我刚好打电话c.I.
在C#中有更好的方法吗?
(如果有人想知道我为什么要这样做,那是因为我使用显式接口实现,并且从另一个成员函数中调用其中一个需要首先转换为接口类型,否则编译器无法找到该方法.)
UPDATE
我想出的另一个选项是对象扩展:
public static class ObjectExtensions
{
[DebuggerStepThrough]
public static T StaticTo<T>(this T o)
{
return o;
}
}
Run Code Online (Sandbox Code Playgroud)
所以((I)c).Doit()也可以c.StaticTo<I>().Doit().嗯...可能仍然坚持简单演员.想想我还是会发布这个其他选项.
简单地投下它:
(I)c
Run Code Online (Sandbox Code Playgroud)
编辑示例:
var c = new C();
((I)c).MethodOnI();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12819 次 |
| 最近记录: |