如何为将课程转换为其他类型提供支持?例如,如果我有自己的管理的实现byte[],并且我想让人们将我的班级强制转换为byte[],它将只返回私有成员,那么我该怎么做?
byte[]
让他们也将其也转换为字符串是一种常见的做法,还是我应该重写ToString()(或同时重写)?
ToString()
您需要使用implicit或explicit取决于您是否希望用户强制转换它,或者是否希望它自动发生,从而覆盖转换运算符。通常,一个方向将始终有效,这是您使用的地方implicit,而另一个方向有时会失败,这是您使用的地方explicit。
implicit
explicit
语法如下:
public static implicit operator dbInt64(Byte x) { return new dbInt64(x); }
要么
public static explicit operator Int64(dbInt64 x) { if (!x.defined) throw new DataValueNullException(); return x.iVal; }
以您的示例为例,从您的自定义类型中说(MyType-> byte[]将始终有效):
MyType
public static implicit operator byte[] (MyType x) { byte[] ba = // put code here to convert x into a byte[] return ba; }
public static explicit operator MyType(byte[] x) { if (!CanConvert) throw new DataValueNullException(); // Factory to convert byte[] x into MyType MyType mt = MyType.Factory(x); return mt; }