C#基础——20230914

目录

 ·对象

1.对象的语法

2.类与对象的关系

·字段

1.语法

·对象使用方法

1.实例化对象

2.字段的赋值与取值

·访问修饰符

·属性

·命名空间

·三种方法

1.普通方法

2.构造方法

3.析构方法

·继承

·多态

1.虚方法

2.面向对象原则

2.1里氏转换原则

3.抽象方法

4.抽象类

5.接口


 ·对象

一个具体的个体,就是一个对象。

通过类实例化出来的就是对象。

1.对象的语法

类名 对象名 = new 类名();

Apple a1 = new Apple();

2.类与对象的关系

类用于描述一类事物的信息;

对象是这个类中的一个具体的个体。

·字段

变量在面向对象的类中就叫做字段。

用于存储一些具体的信息。

1.语法

public 数据类型 字段名;

·对象使用方法

1.实例化对象

类名 对象名 = new 类名();

2.字段的赋值与取值

赋值:对象名.字段名 = 值;

取值:对象名.字段名

·访问修饰符

public:公开的。通过对象名.xxx 的形式可以直接访问到。

private:私有的。通过对象名.xxx 的形式访问不到。

protected:受保护的。只能在当前类的内部,以及该类的子类中访问;实例对象访问不到。

internal:只能在当前程序集(项目)中访问;在同一个项目中 internal 和 public 的访问权限是一样的。

protected internal:protected + internal 的访问权限。

·属性

属性的作用是对字段进行保护,我们将属性设为 public,可以直接访问,然后属性保护的字段设置成private,我们通过属性间接的操作字段。

语法:

public 数据类型 属性名

{

get{return 字段名;}

set{字段名 = value;}

}

get:当通过属性名取值的时候,会自动调用 get 中的代码;

set:当通过属性名给字段赋值的时候,会自动调用 set 中的代码;

·命名空间

命名空间,也叫名称空间,英文名是namespace。

用于对代码文件进行分类管理。

语法:

定义命名空间:namespace 空间名称{ 类 }

引入命名空间:using 空间名称

·三种方法

方法就是函数,在面向对象编程的类中,函数称之为方法。

1.普通方法

语法:

访问修饰符 返回值 方法名(参数列表)

{

方法的具体功能代码;

}

2.构造方法

构造方法可以对实例化出来的对象进行初始化。

语法:

public 类名()

{

构造函数代码;

}

①构造方法要用public 修饰,不能用private 修饰;

②构造方法没有返回值,且连void 也不能写;

③构造方法的方法名字必须跟类名一样;

④构造方法是可以有重载的。

当我们使用new 关键字实例化一个对象的时候,会首先执行构造方法。

当我们的类中不写构造方法的时候,在代码编译后,系统会自动给它添加一个空构造方法,如果我们写了一个构造方法,默认的“空构造方法”就不会存在。

3.析构方法

构造方法用于初始化一个对象,析构方法常用清理一个对象

语法:

~类名()

{

       析构方法代码体;

}

①析构方法不能有任何参数;

②析构方法无返回值也无访问修饰符;

③析构方法由系统自动调用;

④析构方法可以不写。

·继承

面向对象开发有三大特性(特点 / 特征):封装,继承,多态。

将一堆类中的一些共有的“成员”单独抽取出来,作为一个父类,然后这一堆类继承这个父类,共享父类的资源,这就叫做继承。

优点:

①优化代码结构,让类与类之间产生关系(人不是孤立存在的,类也一样);

②提高代码的复用性,便于阅读(写更少的代码,干更多的活);

③为“多态”提供前提(多态是面向对象最复杂的一个特性)。

语法:

子类继承父类,使用“:”冒号关键字符。

class 子类:父类

{

        //类成员;

}

子类继承父类的 字段、属性、普通方法、构造方法。(private修饰在子类中访问不到,public修饰可以访问到,使用base.(字段名/属性名/方法名),构造方法使用base())

·多态

在继承关系的前提下,实例化出不同的对象,这些对象调用相同的方法,但是却表现出不同的行为,这就叫做多态。

在 C#语言中体现多态有三种方式:虚方法,抽象类,接口。

1.虚方法

在父类中使用 virtual 关键字修饰的方法,就是虚方法。

在子类中可以使用 override 关键字对该虚方法进行重写。

语法:

父类:

public virtual 返回值类型 方法名()

{

         方法体代码;

}

子类:

public override 返回值类型 方法名()

{

         方法体代码;

}

①将父类的方法标记为虚方法,就是在父类方法的返回值前加 virtual 关键字,表示这个方法可以被子类重写。

②子类重写父类方法,在子类的方法的返回值前加 override 关键字。

③父类中的虚方法,子类可以重写,也可以不重写。

④父类中用 virtual 修饰的方法,可以用于实现该方法共有的功能(比如初始化该方法),然后在子类重写该方法时,使用 base 关键字调用父类中的该方法。

2.面向对象原则

开闭原则

单一职责原则

里氏替换原则

迪米特原则

接口隔离原则

依赖倒置原则

合成复用原则

2.1里氏转换原则

①子类对象可以直接赋值给父类变量;

②子类对象可以调用父类中的成员,但是父类对象永远只能调用自己的成员;

③如果父类对象中装的是子类对象,可以将这个父类对象强转为子类对象;

is 和 as 两个关键字都可以进行类型转换。

is:如果转换成功,返回 true,失败返回 false;

as:如果转换成功,返回对应的对象,失败返回 null。

3.抽象方法

当我们父类中的这个方法已经虚到完全无法确定方法体的时候,就可以使用另外一种形式来表现,这种形式叫抽象方法。

抽象方法的返回值类型前用关键字 abstract 修饰,且无方法体。抽象方法必须存在于抽象类中。

4.抽象类

在定义类的关键字 class 前面加 abstract 修饰的类就是抽象类。

子类继承抽象类,使用 override 关键字重写父类中所有的抽象方法。

<1>抽象类中不一定要有抽象方法,但是抽象方法必须存在于抽象类中。

<2>抽象类不能被实例化,因为抽象类中有抽象方法(无方法体),如果真能实例化抽象类的话,调用这些无方法体的方法是没有任何意义的,所以无法实例化。

5.接口

当抽象类中所有的方法都是抽象方法的时候,这个时候可以把这个抽象类用另外一种形式来表现,这种形式叫接口。

接口使用 interface 关键字定义,没有 class 关键字,接口名一般使用“IXxxx”这种方式进行书写,在一堆脚本中通过名字判断,I 开头的都是接口。

接口中不能包含字段,但是可以包含属性。 接口中定义的方法不能有方法体,全是抽象方法,但又不需要用 abstract 修饰; 接口中的成员不允许添加访问修饰符,默认都是 public;

<1>接口中所有的方法都是抽象方法,所以接口不能被实例化;

<2>一个类可以实现多个接口,被实现的多个接口之间用逗号分隔开;

<3>一个接口可以继承多个接口,接口之间也要用逗号分隔。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值