如何在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
,不支持struct
inheritance – 所以这是不可能的。
另一种选择是用户定义转换的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上的一个构造函数。 这是一个例子 。