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 "public class Derived : Base{}0001",as expected.
然后我从这个类派生出不同的子类,它们打开/关闭m_value中的不同命名位.例如:
Derived d = 3;// Cannot implicitly convert type 'int' to 'Derived'. An explicit conversion exists (are you missing a cast?)
然后我不能使用我的隐式转/ int转换:
Derived d = (int)3;
即使这样也会出现同样的错误:
Derived d = (int)3;
隐式/显式转换是否未在派生类中继承?如果没有,这将需要大量的代码复制.
响应
非常感谢您的快速回复!你们都应该得到“回答”的标记,它们都是非常好的答案.关键是要考虑等号两侧的类型.现在我想起来就是这样,它很有道理.
我显然只需要重新编写“to Derived”转换. “to Int32,String等”转换仍然适用.
解决方法 原因Derived v = ...;string s = (string)v;
不起作用是因为Derived类型与调用此运算符所需的运算符Base的返回值不完全匹配.请注意,您尚未提供包含新Derived(…)代码的任何转换运算符,因此您不能以这种方式创建新的Derived实例也就不足为奇了.
但请注意,相反的转换
将工作正常(好像它是“继承”,虽然这不是真正的继承由于静态关键字).
总结以上是内存溢出为你收集整理的是否在C#中继承了隐含/显式转换方法?全部内容,希望文章能够帮你解决是否在C#中继承了隐含/显式转换方法?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)