父类放入集合中取出就不能强制转换了,不知道是为什么,望大家指点.谢谢~~~~//例1 能够正确转换
Person p1 = new Student();
Student s1 = new Student();
p1.name = "123";p1.sex = true;
s1 = (Student)p1;
s1.studentId = "456";
MessageBox.Show(s1.name + s1.sex.ToString() + s1.studentId);//例2 从 Collection 集合中取出的数据无法转换
EmployeeInfo EInfo = new EmployeeInfo();
EmployeeErrorInfo EEInfo = new EmployeeErrorInfo();
EmployeeCollection ECollection = new EmployeeCollection();
EmployeeInfo EInfoFromCollection = new EmployeeInfo();
//EmployeeInfo 放入 EmployeeCollection 集合中
EInfo.EmployeeName = "asdf";
ECollection.Add(EInfo);
//从集合中取出 EmployeeInfo 对象
EInfoFromCollection = ECollection.Item(0);
//转换错误抛出异常
EEInfo = (EmployeeErrorInfo)EInfoFromCollection;
MessageBox.Show(EEInfo.EmployeeName);
//c#源代码如下 private void button1_Click(object sender, System.EventArgs e)
{
//例1 能够正确转换
Person p1 = new Student();
Student s1 = new Student();
p1.name = "123";p1.sex = true;
s1 = (Student)p1;
s1.studentId = "456";
MessageBox.Show(s1.name + s1.sex.ToString() + s1.studentId);
   
            //例2 从 Collection 集合中取出的数据无法转换
EmployeeInfo EInfo = new EmployeeInfo();
EmployeeErrorInfo EEInfo = new EmployeeErrorInfo();
EmployeeCollection ECollection = new EmployeeCollection();
EmployeeInfo EInfoFromCollection = new EmployeeInfo();
           
//EmployeeInfo 放入 EmployeeCollection 集合中
EInfo.EmployeeName = "asdf";
ECollection.Add(EInfo);
            //从集合中取出 EmployeeInfo 对象
EInfoFromCollection = ECollection.Item(0);
//转换错误抛出异常
EEInfo = (EmployeeErrorInfo)EInfoFromCollection;
MessageBox.Show(EEInfo.EmployeeName); }
} public class Person
{
private string _name;
private bool _sex;
public string name
{
get { return _name; }
set { _name = value; }
}
public bool sex
{
get { return _sex; }
set { _sex = value; }
}
}
public class Student:Person
{
private string _studentId;
private string _schoolName;
public string studentId
{
get { return _studentId; }
set { _studentId = value; }
}
public string schoolname
{
get { return _schoolName; }
set { _schoolName = value; }
}
}
public class EmployeeInfo
{
private string _employeeName;
public EmployeeInfo()
{}
public string EmployeeName
{
get { return _employeeName; }
set { _employeeName = value; }
}
} public class EmployeeErrorInfo : EmployeeInfo
{
private int _errorType;
private string _errorMessage;
public EmployeeErrorInfo()
{}
public EmployeeErrorInfo(int errorType, string errorMessage)
{
_errorType = errorType;
_errorMessage = errorMessage;
}
public int ErrorType
{
get { return _errorType; }
set { _errorType = value; }
}
public string ErrorMessage
{
get { return _errorMessage; }
set { _errorMessage = value; }
}
} public class EmployeeCollection : CollectionBase
{
public EmployeeInfo Item(int index)
{
return (EmployeeInfo)List[index]; 
} public int Add(EmployeeInfo Value)
{
return List.Add(Value);
} public void Remove(int index)
{
List.RemoveAt(index);
}
}

解决方案 »

  1.   

    不出错就怪了!
    "对像只能被简化而不能被繁化!"class parent
    {
    ...
    }class child : parent
    {
    ...
    }parent p = new child();//简化
    child c = new parent();//错,繁化
      

  2.   

    to weisunding(鼎鼎):
    我的问题不是泛化简化的问题
    Person p1 = new Student();
    Student s1 = new Student();
    p1.name = "123";p1.sex = true;
    s1 = (Student)p1;
    这段代码是正确的。
    我的问题是将对象放入 Collection 集合中再取出强制转换便会失效。
    望大家指点
      

  3.   

    to sunboy_dj(宇风天海) 你看错了吧EmployeeInfo EInfo = new EmployeeInfo();
    ECollection.Add(EInfo);也就是说ECollection中加入的是 EInfo最后取出来的当然也是 EmployeeInfo, 自然转换出错我想你是要把 EmployeeErrorInfo EEInfo = new EmployeeErrorInfo();
    这个添加到集合中的 ECollection.Add(EEInfo);
      

  4.   

    你的p1在定义时是Student类型,当然可以转。
    你的EInfo在定义时是EmployeeInfo类型,当然不能转。