您似乎追求的是继承,能够将派生类实例“存储”在基类型的变量中,如下所示:
Stream s = new FileStream();
它是引擎盖下的事实FileStream
并不会因为您Stream
戴着护目镜指向它而丢失。
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
,该类在内部使用 aDateTime
然后从此类继承以创建MyDateTime
. 然后DateTime
,您可以使用这个适配器类,而不是在您的代码库中使用。
我在SmartDateTime
样式类中看到过类似的事情,其中DateTime
对空值以及是否已设置有更好的理解。