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

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

object date1 = new MyDateTime(); DateTime date2 = (DateTime)date1; 

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

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

请帮忙。

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

 (DateTime) (object) MyDateTime 

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

 Stream s = new FileStream(); 

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

DateTime是一个struct ,不支持structinheritance – 所以这是不可能的。

另一种选择是用户定义转换的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; } } 

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

 public static implicit operator DateTime(MyDateTime mdt) { return mdt._inner; } 

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

 DateTime date = new MyDateTime(); 

另一种方法是使用您自己的适配器类包装DateTime ,该类在内部使用DateTime ,然后从此类inheritance以创建MyDateTime 。 然后,不使用代码库中的DateTime ,而是使用此适配器类。

我在SmartDateTime样式类中看到了类似的东西,其中DateTime更好地理解了null并且是否已设置。

你可以用

 class MyDateTime { public static explicit operator DateTime(MyDateTime dt) { return new DateTime(); // Convert dt here } } 

我会创建一个扩展方法来执行完成转换所需的步骤,而不是直接强制转换。 某种转换是必要的,因为DateTime不能inheritance,所以直接转换是不可能的。

 public static class DateTimeExtensions { public static MyDateTime ToMyDateTime(this DateTime dt) { //conversion logic return myDataTime; } public static DateTime ToDateTime(this MyDateTime mdt) { //conversion logic return dateTime; } } 

通过这种方式,您将使用如下代码:

 DateTime dt = mdt.ToDateTime(); 

要么

 MyDateTime mdt = dt.ToMyDateTime(); 

您需要在MyDateTime类上编写一个显式的强制转换操作符,该操作符调用Datetime上的一个构造函数。 这是一个例子 。