[英]Accessing Methods and Properties of an Inherited Class in C#
假设我有一个像这样的基类和派生类
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});
}
}
现在,在此代码中,当Debug并将鼠标悬停在Content Class中的Method参数上时,我可以看到Student和Person类的所有属性。
但是当我尝试访问该方法时,我只能访问Student类的方法。 为了访问类Person的方法,我必须将其强制转换为Person。 我的问题是,我如何能够查看和检索Student类的属性值,该类是Person类的派生类。 为什么我能看到不属于学生类的财产的价值? 以及为什么我无法访问方法。 请解释一下,是否缺少一些概念?
为什么我可以查看不属于
Student
类的属性的值?
因为调试器会查看对象的实际类型(在这种情况下为Person
)以及与该类型关联的所有属性等。
为什么我无法使用方法?
由于该变量的类型为Student
,因此您只能访问Student
的成员。 如果要访问其他类型的成员(例如Person
),则必须进行强制转换以告知编译器“对该引用进行处理,就好像它引用了Person
”。 如果Student
在运行时不是一个真正的Person
,您将得到一个例外。
您的继承权被翻转了。 只需按以下步骤更改您的课程:
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() { }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.