我想知道typeof
和sizeof
关键字是如何实现的。
如果我想实现我自己的'x'of()
表达式,例如timeof(object)
,其中object
包含DateTime
作为其中一个属性或其他内容,该怎么办?
答案 0 :(得分:10)
简短的回答是否定的。 typeof
和sizeof
是C#语言的一部分,您不能(直接)添加类似的表达式。做你所要求的正常方式就是简单地访问该属性:
DateTime time = myObject.SomeDateTimeProperty;
你可以制定一个方法来做到这一点(尽管对于这样一个微不足道的事情没有意义)。例如。如果您使用了界面:
public interface ICreateTime
{
DateTime CreateTime { get; }
}
public DateTime TimeOf(ICreateTime myObject)
{
return myObject.CreateTime;
}
更具体地说:typeof
和sizeof
不是实现的,与实现方法的方式相同。相反,typeof
会转换为ldtoken [type]
和call System.Type.GetTypeFromHandle
IL instructions,sizeof
会变为常量。 E.g。
Type t = typeof(int);
int s = sizeof(int);
编译为:
IL_0001: ldtoken System.Int32
IL_0006: call System.Type.GetTypeFromHandle
IL_000B: stloc.0 // t
IL_000C: ldc.i4.4 // the constant 4, typed as a 4-byte integer
IL_000D: stloc.1 // s
答案 1 :(得分:1)
对于您的用例,即使可能,我也不建议这样做。
typeof
和sizeof
都是返回与编译器相关的信息的方法。获取对象的时间是访问属性而不是编译器属性。
如果您的对象具有DateTime
,则应使用以下方法访问它:
object.DateTimeProperty