Joh*_*zen 9 .net c# specifications
在几个不同的场合,我试图从一个变量中哄骗声明的类型,相对远离它的声明,只是发现typeof(T)它只适用于类型名称.
我想知道是否会有任何突破性变化也允许typeof(variable).
例如,使用此代码:
class Animal { /* ... */ }
class Goat : Animal { /* ... */ }
/* ... */
var g = new Goat();
Animal a = g;
Console.WriteLine(typeof(Goat));
Console.WriteLine(typeof(Animal));
Console.WriteLine(g.GetType());
Console.WriteLine(a.GetType());
Run Code Online (Sandbox Code Playgroud)
你会得到类似的东西:
山羊
动物
山羊
山羊
为什么不可能这样做:
Console.WriteLine(typeof(g));
Console.WriteLine(typeof(a));
Run Code Online (Sandbox Code Playgroud)
山羊
动物
我粗略地看了一眼规格,发现没有任何冲突.我认为它会澄清"为什么这种类型?"的问题.使用typeof运营商时.
我知道编译器能够在这里.使用扩展方法的实现实际上是微不足道的:
public static Type TypeOf<T>(this T variable)
{
return typeof(T);
}
Run Code Online (Sandbox Code Playgroud)
但这感觉很脏,滥用编译器的类型推断.
假设允许:
class Animal { }
string Animal;
Type t = typeof(Animal); // uh-oh!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3779 次 |
| 最近记录: |