📜  classe padre figlio c# (1)

📅  最后修改于: 2023-12-03 15:14:09.990000             🧑  作者: Mango

父子类关系及继承(Inheritance)在C#中的应用

在C#中,子类可以继承父类的属性和方法。这种父子类的关系被称为继承(Inheritance),继承是一种重要的面向对象编程(OOP)技术,使得我们可以更优雅地解决问题。

父子类的定义

在C#中,我们可以通过class来定义类。下面是一个简单的例子:

public class ParentClass
{
    public string Name = "Parent";
    public virtual void SayHello()
    {
        Console.WriteLine("Hello from ParentClass");
    }
}

public class ChildClass : ParentClass
{
    public string Nickname = "Child";
    public override void SayHello()
    {
        Console.WriteLine("Hello from ChildClass");
    }
}

在上面的代码中,我们定义了两个类:ParentClass和ChildClass,其中ChildClass继承了ParentClass。子类可以使用父类中的方法和属性。

父子类的使用

我们可以使用下面的代码来创建一个ChildClass对象,并访问其中的属性和方法:

ChildClass child = new ChildClass();
Console.WriteLine(child.Name); // Output: Parent
Console.WriteLine(child.Nickname); // Output: Child
child.SayHello(); // Output: Hello from ChildClass

在上面的代码中,我们创建了一个ChildClass对象,并访问了其中的Name和Nickname属性。我们还调用了SayHello方法,由于ChildClass覆盖了ParentClass中的SayHello方法,所以输出的是"Hello from ChildClass"。

父子类的关系

在C#中,父子类的关系是一种"is-a"的关系,也就是说,子类是一种父类。例如,在上面的例子中,ChildClass是一种ParentClass。

我们可以使用"is"关键字来检查一个对象是否是一个类的实例:

ChildClass obj = new ChildClass();
bool isParent = obj is ParentClass; // true
父类的构造函数

当我们创建一个子类的对象时,父类的构造函数也会被调用。如果父类中有无参数的构造函数,子类中的构造函数可以不显式地调用父类的构造函数:

public class ParentClass
{
    public ParentClass()
    {
        Console.WriteLine("ParentClass constructor");
    }
}

public class ChildClass : ParentClass
{
    public ChildClass()
    {
        Console.WriteLine("ChildClass constructor");
    }
}

我们创建一个ChildClass对象,并查看控制台输出:

ChildClass obj = new ChildClass();
// Output:
// ParentClass constructor
// ChildClass constructor

在上面的代码中,我们创建了一个ChildClass对象,控制台输出了ParentClass构造函数和ChildClass构造函数的调用顺序。

继承的限制

在C#中,父类的私有成员不能被子类继承。此外,子类不能直接访问父类的私有成员。

public class ParentClass
{
    private int Age = 30;
    public int GetAge() { return Age; }
}

public class ChildClass : ParentClass
{
    public int GetAgeFromChild() { return Age; } // Compile error!
}

在上面的代码中,ChildClass不能直接访问ParentClass中的Age私有成员,因为Age是私有的。我们可以通过父类的公共方法(GetAge)来访问Age属性。

总结

父子类的关系是面向对象编程中重要的一种技术。在C#中,我们可以使用class来定义类。子类可以继承父类的属性和方法。此外,子类还可以覆盖父类的方法,并添加自己的属性和方法。在使用继承时,我们需要注意父类的构造函数、访问修饰符、继承的限制等方面。