C#中的类和继承

简介: C#中的类和继承

类继承

通过继承我们可以定义一个新类,新类纳入一个已经声明的类并进行扩展。

可以使用一个已经存在的类作为新类的基础。已存在的类称为基类(base class),新类称为派生类(derived class)

基类规格说明:由冒号和后面跟着用作基类的类名称组成。

派生类被描述为直接基础列出的基类。

相关概念如下所示:

继承的成员可以被访问,就像是它们是派生类自己声明的一样。

在派生类中访问基类中的字段和方法的例子

class SomeClass //基类
    {
        public string field1 = "base class field";
        public void Method1(string value)
        {
            Console.WriteLine($"Base class -- Method1: {value}");
        }
    }
    class OtherClass : SomeClass //派生类
    {
        public string field2 = "derived class field";
        public void Method2(string value)
        {
            Console.WriteLine($"Derived class -- Method2: {value}");
        }
    }
    internal class Program
    {
        static void Main(string[] args)
        {
           OtherClass oc = new OtherClass();    
            oc.Method1(oc.field1);
            oc.Method1(oc.field2);
            oc.Method2(oc.field1);
            oc.Method2(oc.field2);
        }
    }


运行结果如下所示:

所有的类都派生自object类

在C#中除了特殊的类object,所有的类都是派生类,即使没有基类规格说明。

在C#中一个类声明的基类规格说明中只能有一个单独的类。这称为单继承

虽然类只能直接继承一个基类,但继承的层次没有限制。

隐藏继承的成员

可以使用new修饰符来屏蔽基类成员,代码如下U所示:

class SomeClass //基类
    {
        public string field1 = "base class field";
        public void Method1(string value)
        {
            Console.WriteLine($"Base class -- Method1: {value}");
        }
    }
    class OtherClass : SomeClass //派生类
    {
         //使用new修饰符屏蔽基类成员
         new public string field1 = "derived class field";
         new public void Method1(string value)
        {
            Console.WriteLine($"Derived class -- Method2: {value}");
        }
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            OtherClass oc = new OtherClass();
            oc.Method1(oc.field1);
        }
    }

 

运行结果如下所示:

访问基类成员

可以使用基类访问(base access)表达式访问隐藏的继承成员,基类访问表达式由关键字base后面跟着一个点和成员的名称组成。

访问隐藏的基类成员的例子

代码如下:

class SomeClass //基类
    {
        public string field1 = "base class field";
        
    }
    class OtherClass : SomeClass //派生类
    {
         new public string field1 = "derived class field";   
        public void PrintField1()
        {
            Console.WriteLine(field1);  //访问派生类
            Console.WriteLine(base.field1); //访问基类
        }
    }
    
    internal class Program
    {
        static void Main(string[] args)
        {
            OtherClass oc = new OtherClass();
            oc.PrintField1();
        }
    }

运行结果如下所示:

目录
相关文章
|
17天前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
|
1月前
|
存储 C# 索引
C# 一分钟浅谈:数组与集合类的基本操作
【9月更文挑战第1天】本文详细介绍了C#中数组和集合类的基本操作,包括创建、访问、遍历及常见问题的解决方法。数组适用于固定长度的数据存储,而集合类如`List<T>`则提供了动态扩展的能力。文章通过示例代码展示了如何处理索引越界、数组长度不可变及集合容量不足等问题,并提供了解决方案。掌握这些基础知识可使程序更加高效和清晰。
71 2
|
16天前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
111 65
|
1月前
|
安全 C#
C# 面向对象编程的三大支柱:封装、继承与多态
【9月更文挑战第17天】在C#中,面向对象编程的三大支柱——封装、继承与多态,对于编写安全、可维护、可复用的代码至关重要。封装通过访问修饰符和属性保护数据;继承允许子类继承父类的属性和方法,实现代码复用和多态;多态则提高了代码的灵活性和通用性。掌握这三大概念能显著提升C#编程能力,优化开发效率和代码质量。
|
15天前
|
Java 程序员 C#
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
8 0
|
1月前
|
存储 C#
C# 一分钟浅谈:继承与多态性的实践
【9月更文挑战第2天】本文从基础入手,详细介绍了面向对象编程中继承与多态性的核心概念。通过 `Animal`、`Dog` 和 `Cat` 类的示例代码,展示了如何利用继承重用代码及多态性实现不同对象对同一方法的多样化响应,帮助读者更好地理解和应用这两个重要概念,提升面向对象编程能力。
36 3
|
1月前
|
C# 数据安全/隐私保护
C# 一分钟浅谈:类与对象的概念理解
【9月更文挑战第2天】本文从零开始详细介绍了C#中的类与对象概念。类作为一种自定义数据类型,定义了对象的属性和方法;对象则是类的实例,拥有独立的状态。通过具体代码示例,如定义 `Person` 类及其实例化过程,帮助读者更好地理解和应用这两个核心概念。此外,还总结了常见的问题及解决方法,为编写高质量的面向对象程序奠定基础。
23 2
|
2月前
|
C# 索引
C# 面向对象编程(二)——继承
C# 面向对象编程(二)——继承
36 0
|
2月前
|
Java C# 索引
C# 面向对象编程(一)——类
C# 面向对象编程(一)——类
32 0
|
2月前
|
开发框架 .NET 编译器
C# 中的记录(record)类型和类(class)类型对比总结
C# 中的记录(record)类型和类(class)类型对比总结