你似乎需要继承,能够像这样将派生类实例“存储”在基础类型的变量中:
Stream s = new FileStream();
即使你戴着 Stream
的眼镜,它的内部仍然是一个 FileStream
。
DateTime
是一种 struct
,不支持 struct
继承 - 所以这是不可能的。
另一个选择是使用 explicit
关键字进行自定义转换(在语法上类似于强制类型转换)。这允许您在您的类和DateTime
之间进行更方便的互换。
这可能看起来像:
class MyDateTime
{
private DateTime _inner;
public static explicit operator DateTime(MyDateTime mdt)
{
return mdt._inner;
}
}
你可以使用对应的 implicit
关键字做同样的操作:
public static implicit operator DateTime(MyDateTime mdt)
{
return mdt._inner;
}
这样你就可以隐式地进行“转换”:
DateTime date = new MyDateTime();
另一种解决方案是使用自己的适配器类来包装DateTime
,内部使用DateTime
,然后从这个类继承来创建MyDateTime
。然后在您的代码库中,不要使用DateTime
,而是使用这个适配器类。
我曾经看到过类似的SmartDateTime
风格的类,其中DateTime
对null值和是否已设置有更好的理解。
Convert.ToDateTime
吗?为什么需要一个object
变量? - Random832