是否在C#中继承了隐含/显式转换方法?
发布时间:2020-12-15 07:57:20 所属栏目:百科 来源:网络整理
导读:我不确定我在这里做错了什么.我有一个泛型类,它基本上是一个美化的整数,有一些方法可以进行某些字符串格式化,以及进入/来自string和int转换: public class Base{ protected int m_value; ... // From int public static implicit operator Base(int Value)
我不确定我在这里做错了什么.我有一个泛型类,它基本上是一个美化的整数,有一些方法可以进行某些字符串格式化,以及进入/来自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等”转换仍然适用. 解决方法
原因
Derived d = (int)3; 不起作用是因为Derived类型与调用此运算符所需的运算符Base的返回值不完全匹配.请注意,您尚未提供包含新Derived(…)代码的任何转换运算符,因此您不能以这种方式创建新的Derived实例也就不足为奇了. 但请注意,相反的转换 Derived v = ...; string s = (string)v; 将工作正常(好像它是“继承”,虽然这不是真正的继承由于静态关键字). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |