C# 面向对象编程基础——002

本文概述了C#中的类继承、多态性、结构与接口的区别、索引器的使用、异常处理以及委托的作用,强调了面向对象编程的关键概念和C#语言特性。
摘要由CSDN通过智能技术生成

1、类的继承与多态

继承:

类的继承是面向对象一个非常重要的特征。这种方式在程序开发的过程中可以极大的提高代码的复用性,同时也便于拓展程序的功能。

在C#中,类的继承是指在一个现有的类的基础上去构建一个新的类,子类会自动拥有父类所有可继承的属性和方法(构建出来的新类称为子类,现有的类称为父类)

        比如现在有一个父亲,父亲鼻子高高的,头发比较少,并且会编程,父亲有一个儿子,儿子继承了父亲的外观特征,并且成为了一个律师,使用代码实现如下: 

class Grandpa{
   String nose;
   int hair;
   
   public void walk(){
       System.out.println("行走");
   }
}

class Father extends Grandpa{
   // 编程能力
   private void programmed(){
   }
}

class Son extends Father{
   public void law(){
       
   }
} 

        继承的特性

  • 子类拥有父类非 private 的属性、方法。
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
  • 子类可以用自己的方式实现父类的方法。
  • Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。
  • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。 

多态:  

        多态是同一个行为具有多个不同表现形式或形态的能力。

        多态就是同一个接口,使用不同的实例而执行不同操作,比如父亲会说话并且说的是中文,儿子因为受过高等教育,因此会说很多国家的语言: 

class Father extends Grandpa
{     
    public void talk()
    {         
        System.out.println("说中文");     
    } 
} 
class Son extends Father
{     
    public void talk()
    {         System.out.println("说很多国家语言");     
    } 
} 

2、结构与接口

        结构是值类型,而类是引用类型。

        1.与类不同,结构的实例化可以不使用 new 运算符。结构可以声明构造函数,但它们必须带参数。

        2.一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接继承自 System.ValueType,后者继承System.Object。

        3.结构可以实现接口。结构在定义变量时不能给定初始值。如果要在结构中使用构造函数则必须给所有的变量赋值。

在C#上可以用struct关键字来声明结构,语法格式为:

结构修饰符 struct 结构名
{
    //成员变量
}

接口是引用类型的,类似于类,和抽象类的相似之处有三点:
      1. 不能实例化;
      2. 包含未实现的方法声明;
      3. 派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);
      另外,接口有如下特性:
      接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。 

在C#上可以用interface关键字来声明结构,语法格式为:

修饰符 interface 接口名称:继承的接口列表
{
    //接口内容
}

3、索引器

       C#支持一种名为索引器的特殊“属性”,它能通过引用数组元素的方式来引用对象。索引器允许类或结构的实例就像数组一样进行索引。无需显式指定类型或实例成员,即可通过运算符[]设置或检索索引值。索引器类似于属性,不同的是索引器的访问器需要使用参数。

        在 C# 中可以使用 this 关键字作为属性名声明索引器,并在方括号内声明参数。索引器也可以使用 C# 中任何有效的访问修饰符,在索引器中为 get 和 set 访问器前指定不同的访问修饰符即可。和属性的定义一样,索引器内也需要定义 get 和 set 访问器,其中 get 访问器返回值。 set 访问器分配值。

4、异常处理

        异常处理是指在程序中检测、捕获和处理异常的过程,以防止程序在遇到错误时崩溃或产生不受控制的行为。在C#中,异常处理主要通过try...catchtry...catch...finallythrow等关键字来实现。

5、委托

        委托是一个类型,一个引用类型,用来保存方法的指针。如果借用C/C++的概念来理解,那么,委托就是函数指针!

当我们调用委托的时候,这个方法就立即被执行。

委托类型的声明语法格式如下:

修饰符 delegate 返回累心 委托名称(参数列表)

在C#中,委托(Delegate)是一种引用类型,它可以封装一个或多个方法,并允许以相同的签名调用这些方法。使用委托可以提供以下几个好处:

  • 封装方法:委托允许你将一个或多个方法封装到一个对象中,并将其作为参数传递给其他方法或存储在变量中。这样可以更方便地操作和传递方法,使代码更加模块化和可重用。
  • 回调机制:委托可以用作回调机制的基础。当某个事件发生时,可以调用委托来触发注册的方法,从而实现事件的异步处理。
  • 简化多线程编程:在多线程编程中,委托可以用来实现线程间的通信和同步。通过将方法封装到委托中,并在不同的线程中调用委托,可以方便地实现线程的启动、暂停、恢复等操作。
  • 扩展方法的功能:委托可以用来扩展方法的功能,使其具有更高的灵活性。通过传递不同的委托实例,可以在不修改原有代码的情况下改变方法的行为。

使用委托可以提高代码的灵活性、可重用性和可维护性。它可以帮助你更好地管理方法并实现各种编程模式,例如事件驱动、回调和多线程编程。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值