一尘不染

如何为班级提供自定义演员表支持?

c#

如何为将课程转换为其他类型提供支持?例如,如果我有自己的管理的实现byte[],并且我想让人们将我的班级强制转换为byte[],它将只返回私有成员,那么我该怎么做?

让他们也将其也转换为字符串是一种常见的做法,还是我应该重写ToString()(或同时重写)?


阅读 225

收藏
2020-05-19

共1个答案

一尘不染

您需要使用implicitexplicit取决于您是否希望用户强制转换它,或者是否希望它自动发生,从而覆盖转换运算符。通常,一个方向将始终有效,这是您使用的地方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[]将始终有效):

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;
}
2020-05-19