如何实现typeof和sizeof

时间:2014-03-14 19:15:59

标签: c#

我想知道typeofsizeof关键字是如何实现的。

如果我想实现我自己的'x'of()表达式,例如timeof(object),其中object包含DateTime作为其中一个属性或其他内容,该怎么办?

2 个答案:

答案 0 :(得分:10)

简短的回答是否定的。 typeofsizeof是C#语言的一部分,您不能(直接)添加类似的表达式。做你所要求的正常方式就是简单地访问该属性:

DateTime time = myObject.SomeDateTimeProperty;

你可以制定一个方法来做到这一点(尽管对于这样一个微不足道的事情没有意义)。例如。如果您使用了界面:

public interface ICreateTime
{
    DateTime CreateTime { get; }
}

public DateTime TimeOf(ICreateTime myObject)
{
    return myObject.CreateTime;
}

更具体地说:typeofsizeof不是实现的,与实现方法的方式相同。相反,typeof会转换为ldtoken [type]call System.Type.GetTypeFromHandle IL instructionssizeof会变为常量。 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)

对于您的用例,即使可能,我也不建议这样做。

typeofsizeof都是返回与编译器相关的信息的方法。获取对象的时间是访问属性而不是编译器属性。

如果您的对象具有DateTime,则应使用以下方法访问它:

object.DateTimeProperty