C#定义子类时基类是如何工作的?

问题描述:

所以我只是试图让我的头围绕这个概念在这里:C#定义子类时基类是如何工作的?

方案1

我有一个名为的人一个基类,它有一个不带参数的单一constrcutor(即默认构造函数)

这个类有2分保护遗产,我可以改变(他们是公开的)

现在我想创建一个子类(称之为学生),有一个额外的参数,所以我可以创建3个参数的构造函数(1 + 2从基类)

如果我创建一个子类的对象,我可以在3个参数传递 - 没问题这工作(这可能是错误的方式做到这一点,但它的作品)

方案2

我有一个基类称为人,现在我有一个单一的构造函数接受2个参数,我没有没有参数的默认构造函数。

当我现在创建子类(学生),为其构造函数创建另一个参数。

这个构造函数只有一个参数,就像我在情景1

做不过我可以用:base()链接的基类,我不能从基类中添加第二个和第三个参数,但我需要通过在值与参数相反。

问题

如何我把自定义值在:base类当我创建一个学生对象。因为当我将它链接到子类构造函数中时,我正在传入值。

基类

class Person 
{ 
    protected string Name; 
    protected int Age; 

    //public Person1(){} 

    public Person(string _name, int _age) 
    { 
     Name = _name; 
     Age = _age; 
    } 

    public void SayHello() 
    { 
     Console.WriteLine("Helllo World!"); 
     Console.WriteLine($"My name is {Name} and I am {Age} years old"); 
    } 
} 

子类

class Student : Person1 
{ 
    private int StudentId; 

    //I was hoping to put in new parameters in the base() 
    public Student(int _studentId) : base ("", 00) 
    { 
     //_name and _age do not exist 
     //Name = _name; 
     //Age = _age; 
     StudentId = _studentId; 
    } 
} 

Program.cs的

static void Main(string[] args) 
    { 
     var p1 = new Person1("John", 45); 
     p1.SayHello(); 


     var student1 = new Student(123456); 
    } 

但我不知道^ h ow添加在我的基类中设置的参数

+0

编写新的构造函数时,默认情况下编译器不生成默认的无参数构造函数。所以除了其他构造函数外,为了能够调用'base()' –

+0

所以你必须编写无参数构造函数。所以,当我创建子类的对象时,如何定制这些参数?换句话说,如果在学生课程中没有参数,我怎样才能给student1一个不同的名字,然后student2呢? –

+0

肮脏的方法是使用静态字段来为每个实例化您的数字。干净的方式是使用工厂模式,创建一个工厂来处理学生的初始化 –

构造函数Student需要接受将传递给基础构造函数Person的参数。

class Student : Person 
{ 
    private int StudentId; 

    public Student(string name, int age, int studentId) 
     : base(name, age) 
    { 
     StudentId = studentId; 
    } 
} 
+0

同样映射学生姓名和年龄参数这里的基地名称和年龄? –

+0

将基础构造函数看作您从子构造函数调用的方法。 'Student'构造函数*调用Person的构造函数,并根据'Person'构造函数签名传入两个参数。第一个参数是一个字符串(在基础构造函数中引用为'_name'),第二个参数是一个整数(在基础构造函数中引用为“_age”。) –

+0

真棒,现在变得更有意义:-)感谢为我澄清这一点。 –