ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#中的继承 (继承、抽象类和抽象方法、接口)-转载

2021-09-12 21:32:59  阅读:127  来源: 互联网

标签:继承 基类 C# 派生类 override 抽象类 方法 public


原文连接:

C#中的继承 (继承、抽象类和抽象方法、接口)

最近在研究重构,所以对于类,接口这些研究的也比较多,然后看各种资料,只要我感觉到能学到东西,就记录下来,感觉是件有意义的事情。

一、继承

什么是继承:继承 是允许重用现有类去创建新类的过程。分类的原则 是一个类派生出来的子类 具有这个类的 所有非私有的属性。

1、继承C#中的类:

C# 不支持多重继承,C# 类始终继承自一个基类(如果未在声明中指定一个基类,则继承自 System.Object)。

派生类继承基类的语法如下:

using System;
public class Person
{
  //这是基类
}
public class Student:Person
{
  //这是派生类
}

注:派生类继承基类时用 “:” 符号连接,派生类 继承基类的 所有非私有成员变量和方法。

2、调用基类的构造函数:

如果对类没有定义显式构造函数,则编译器将提供默认的构造函数,以初始化这些类的成员字段。但是,如果显式添加了构造函数,就可以有效控制整个构造过程。

示例:

using System;
namespace Jicheng
{
    //基类
    public class Person
    {
        public string  _name;
        public uint  _age;
        //基类的构造函数
        public Person(string name,uint age)
        {
            this._name = name;
            this._age = age;
            //打印输出
            Console.WriteLine(_name);
            Console.WriteLine(_age);
        }
    }
    //派生类
    public class Student:Person
    {
        private uint _id;
        //派生类构造函数并调用基类构造函数用“:base”
        public Student(string name,uint age uint id):base(name,age)
        {
            this._id = id;
            //打印输出
            Console.WriteLine(_id);
        }
    }
    public class Exercise
    {
        [STAThread]
        static void Main(string[] args)
        {
            //构造 Student
            Student objstudent=new Student(“XYZ”,45,001);
        }
    }
}

注:派生类通过使用:base()语法可以显式调用基类的构造函数。在必要的情况下,可以利用它来初始化字段。

二、C#中的方法重写

关键字:override

override 关键字 用于修改方法,具有 override 关键字修饰符的方法 是对基类中同名方法的新实现,基类中的同名方法 必须声明为 virtual 或 abstract 类型。给基类中的方法 添加 virtual 关键字 表示可以在派生类中重写它的实现。

1、默认的 C# 方法并非 virtual,因此不能重写。
2、基类方法的可访问级别 并不因重写它的方法而改变,他们的访问修饰符相同。
3、new、static 和 virtual 关键字不能与 override 访问修饰符一同使用

关键字:virtual

C# 中提供 virtual 关键字,用语将方法定义为支持多态,用于对一个类中可修改的方法的声明,这种方法称为 虚拟方法,字类可以使用 override 关键字自由实现它们各自版本的虚拟方法
语法:

[访问修饰符] virtual [返回值类型] 方法名称([参数列表])
{
  //虚拟方法的实现
}

1、virtual 访问修饰符不能与 static 和 override 等访问修饰符一同使用
2、调用虚拟方法,在运行时系统会自动检查,以确定 调用了哪一个实现方法。

关键字:new

new 访问修饰符 用于显式隐藏继承自基类的成员,如果派生类成员 与 基类成员名称相同,new 会将派生类成员识别为一个全新成员。
1、在一个方法中同时使用 new 和 override 将会出错。
2、new 访问修饰符的真正目的是为了 隐藏基类方法。
3、如果将一个方法声明为 new,它实际上 并没有隐藏基类方法,并且编译器也产生了警告,这时应该删除 new。

三、抽象类和抽象方法

什么是抽象类:不能被实例化的类称为 抽象类,抽象类是 派生类的基类。
关键字:abstract
语法:

abstract class 类名
{
    …………
}

1、一个 抽象类 可以同时包含 抽象方法 和 非抽象方法。
2、抽象方法只在派生类中真正实现,这表明抽象方法只存放函数原型,不涉及主体代码,
3、派生自抽象类的类 需要实现其 基类的抽象方法,才能实例化对象。
4、使用 override 关键字 可在派生类中实现抽象方法,经 override 声明重写的方法称为 重写基类方法,其签名必须与 override 方法的签名相同。

示例:

using System;
namespace Example_5
{
    //抽象类
    abstract class ABC
    {
         //抽象方法
         public abstract void Afunc();
    }
    //派生类
    class Derv:ABC
    {
        //实现抽象类中的抽象方法
        public override void Afunc()
        {
            Console.WriteLine(“实现抽象方法”);
        }
    }
    public class Test
    {
        static void Main(string[] args)
        {
             Derv obj=new Derv();
             obj.Afunc();
        }
    }
}                

5、基类 实现 抽象类,则 派生类 不需要重新实现该 抽象类。
6、抽象类 并不仅仅只是一种实现技巧,它更代表一种抽象的概念,从而为所有的派生类确立一种约定。

 

标签:继承,基类,C#,派生类,override,抽象类,方法,public
来源: https://www.cnblogs.com/HarryVan/p/15260142.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有