是否在C#中继承了隐含/显式转换方法?

前端之家收集整理的这篇文章主要介绍了是否在C#中继承了隐含/显式转换方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我不确定我在这里做错了什么.我有一个泛型类,它基本上是一个美化的整数,有一些方法可以进行某些字符串格式化,以及进入/来自string和int转换:
public class Base
{
    protected int m_value;
    ...
    // From int
    public static implicit operator Base(int Value)
    {
        return new Base(Value);
    }
    ...
    // To string
    public static explicit operator string(Base Value)
    {
        return String.Format("${0:X6}",(int)Value);
    }
}

它运作良好.我可以成功使用隐式和显式转换:

Base b = 1;
Console.WriteLine((string)b);  // Outputs "$000001",as expected.

然后我从这个类派生出不同的子类,它们打开/关闭m_value中的不同命名位.例如:

public class Derived : Base
{

}

然后我不能使用我的隐式转/ int转换:

Derived d = 3;
// Cannot implicitly convert type 'int' to 'Derived'. An explicit conversion exists (are you missing a cast?)

即使这样也会出现同样的错误

Derived d = (int)3;

隐式/显式转换是否未在派生类中继承?如果没有,这将需要大量的代码复制.

响应
非常感谢您的快速回复!你们都应该得到“回答”的标记,它们都是非常好的答案.关键是要考虑等号两侧的类型.现在我想起来就是这样,它很有道理.

我显然只需要重新编写“to Derived”转换. “to Int32,String等”转换仍然适用.

解决方法

@H_403_30@ 原因
Derived d = (int)3;

不起作用是因为Derived类型与调用此运算符所需的运算符Base的返回值不完全匹配.请注意,您尚未提供包含新Derived(…)代码的任何转换运算符,因此您不能以这种方式创建新的Derived实例也就不足为奇了.

但请注意,相反的转换

Derived v = ...;
string s = (string)v;

将工作正常(好像它是“继承”,虽然这不是真正的继承由于静态关键字).

猜你在找的C#相关文章