父类放入集合中取出就不能强制转换了,不知道是为什么,望大家指点.谢谢~~~~//例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);
}
}
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);
}
}
"对像只能被简化而不能被繁化!"class parent
{
...
}class child : parent
{
...
}parent p = new child();//简化
child c = new parent();//错,繁化
我的问题不是泛化简化的问题
Person p1 = new Student();
Student s1 = new Student();
p1.name = "123";p1.sex = true;
s1 = (Student)p1;
这段代码是正确的。
我的问题是将对象放入 Collection 集合中再取出强制转换便会失效。
望大家指点
ECollection.Add(EInfo);也就是说ECollection中加入的是 EInfo最后取出来的当然也是 EmployeeInfo, 自然转换出错我想你是要把 EmployeeErrorInfo EEInfo = new EmployeeErrorInfo();
这个添加到集合中的 ECollection.Add(EEInfo);
你的EInfo在定义时是EmployeeInfo类型,当然不能转。