我有两个班,名为Post and Question.问题定义为:
public class Question : Post { //... }
我的问题类不覆盖任何Post的成员,它只是表达其他一些.
我想完成什么
我有一个类型为Post的对象,其成员已填充.现在,我想把它转换成一个问题,以便我可以为其他几个成员添加值.
这是我当前的代码,使用一个显式的转换:
Post postToQuestion = new Post(); //Populate the Post... Question ques = (Question)postToQuestion; //--> this is the error! //Fill the other parts of the Question.
问题
我得到一个InvalidCastException.我究竟做错了什么?
解决方法
问题是你不能从父母到孩子.您可以为使用父类作为参数的子类创建一个构造函数:
Question ques = new Question(myPost);
Question ques = new Question(myPost);
您也可以使用隐式运算符来简化操作:
问题ques = myPost;
http://www.codeproject.com/KB/cs/Csharp_implicit_operator.aspx
编辑:
其实我刚刚尝试用一个演示给你做一个隐含的运算符:
class Question : Post { public Question() { //... } public Question(Post p) { // copy stuff to 'this' } public static implicit operator Question(Post p) { Question q = new Question(p); return q; } }
但是很明显,C#不允许您使用基类进行隐式转换.