What you appear to be after is inheritance, being able to "store" a derived class instance in a variable of the base type like so:
Stream s = new FileStream();
The fact that it is a FileStream
under the hood is not lost just because you are pointing to it with the Stream
goggles on.
DateTime
is a struct
, and struct
inheritance is not supported - so this is not possible.
An alternative is the explicit
keyword for user-defined conversions (syntactically looking like casts). This allows you to at least interchange between your class and DateTime
with more sugar.
This could look like:
class MyDateTime
{
private DateTime _inner;
public static explicit operator DateTime(MyDateTime mdt)
{
return mdt._inner;
}
}
You can do the same with the counterpart implicit
keyword:
public static implicit operator DateTime(MyDateTime mdt)
{
return mdt._inner;
}
That then lets you do the "casting" implicitly:
DateTime date = new MyDateTime();
Another alternative is to wrap DateTime
with your own adapter class that internally uses a DateTime
and then inherit from this class to create MyDateTime
. Then instead of using DateTime
in your code base, you use this adapter class.
I've seen similar things with SmartDateTime
style classes where the DateTime
has a better understanding of nulls and if it was set.
Convert.ToDateTime
? Why does it need to be anobject
variable? – Polymorphonuclear