如何在C#中创建类,可以转换为DateTime?

Evg*_*kim 13 c# datetime packing

如何创建可以转换为DateTime的类.但是,当它打包时,我需要投我的课.例如:

object date1 = new MyDateTime();
DateTime date2 = (DateTime)date1;
Run Code Online (Sandbox Code Playgroud)

我需要直接这个工作的例子.

我知道怎么做,但我的方式将无需包装.我不确定是否有办法做到这一点.

请帮忙.

PS.我需要直接将对象转换为DateTime.因此,MyDateTime必须先包装好.显式效果很好,但是如果你有打包对象则没有用.它必须使用普通的铸造像

(DateTime) (object) MyDateTime
Run Code Online (Sandbox Code Playgroud)

Ada*_*rth 31

你看起来是继承,能够将派生类实例"存储"在基类型的变量中,如下所示:

Stream s = new FileStream();
Run Code Online (Sandbox Code Playgroud)

它是一个FileStream引擎盖下的事实不会因为你用Stream护目镜指向它而丢失.

DateTimestructstruct不支持继承-所以这是没有可能的.

另一种选择用户定义的转换explicit关键字(在语法上看起来像转换).这使您至少可以在班级和更多糖之间进行交流.DateTime

http://msdn.microsoft.com/en-us/library/xhbhezf4(v=vs.71).aspx

这可能看起来像:

class MyDateTime
{
    private DateTime _inner;

    public static explicit operator DateTime(MyDateTime mdt)
    {
        return mdt._inner;
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用对应的implicit关键字执行相同的操作:

public static implicit operator DateTime(MyDateTime mdt)
{
    return mdt._inner;
}
Run Code Online (Sandbox Code Playgroud)

然后让你隐式地进行"投射":

DateTime date = new MyDateTime();
Run Code Online (Sandbox Code Playgroud)

另一种方法DateTime使用您自己的内部使用a的适配器类进行包装,DateTime然后从此类继承来创建MyDateTime.然后DateTime使用此适配器类而不是在代码库中使用.

我已经在SmartDateTime样式类中看到过类似的东西,它们DateTime可以更好地理解null,如果已经设置了.


Mar*_*rco 10

你可以用

class MyDateTime
{
    public static explicit operator DateTime(MyDateTime dt)
    {
        return new DateTime(); // Convert dt here            
    }
}
Run Code Online (Sandbox Code Playgroud)