繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM