假设我有一个像这样的基类和派生类
class Student {
public string Name { get; set; }
public int RollID { get; set; }
public void GetPaint() { }
}
class Person : Student {
public string Address { get; set; }
public void GetGun() { }
}
class Content {
public void method(Student student) {
Student _student = student;
Person _person = (Person)student;
}
}
class Client
{
static void Main()
{
new Content().method(new Person() { Name="foo",RollID=1});
}
}
现在在这段代码中调试并将鼠标悬停在Content Class的Method参数上时,我可以看到Student和Person类的所有属性
但是当我尝试访问该方法时,我只能访问类Student的方法。我必须将其强制转换为Person才能访问Person类的方法。 我的问题是,我如何能够查看和检索类Person的属性值,该类是类Person的派生类。为什么我能够看到属于不属于学生类的属性的值?为什么我无法访问方法。请解释,我错过了一些概念吗?
答案 0 :(得分:1)
为什么我能够看到不属于类
Student
的属性的值?
因为调试器会查看对象的实际类型(在这种情况下为Person
)以及与该类型相关联的所有属性等。
为什么我无法访问方法?
由于变量的类型为Student
,因此您允许访问的所有人都是Student
的成员。如果要访问其他类型的成员(例如Person
),则必须强制转换告诉编译器"将此引用视为引用{{ 1}}&#34 ;.如果Person
在运行时不是Student
,那么您将获得例外。
答案 1 :(得分:0)
你的继承被翻转了。只需更改您的课程如下:
class Person {
public string Address { get; set; }
public void GetGun() { }
}
class Student : Person {
public string Name { get; set; }
public int RollID { get; set; }
public void GetPaint() { }
}