在C#中访问继承类的方法和属性

时间:2016-11-23 17:04:52

标签: c# inheritance methods properties

假设我有一个像这样的基类和派生类

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类的所有属性

enter image description here 但是当我尝试访问该方法时,我只能访问类Student的方法。我必须将其强制转换为Person才能访问Person类的方法。 我的问题是,我如何能够查看和检索类Person的属性值,该类是类Person的派生类。为什么我能够看到属于不属于学生类的属性的值?为什么我无法访问方法。请解释,我错过了一些概念吗?

2 个答案:

答案 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() { }
}