当前位置:文档之家› c#类基础知识

c#类基础知识

--a;
赋值会创建值的副本,修改任一个 副本,不影响其它副本。
引用类型
• 引用类型变量存储对象的内存地址,赋值 不会创建值的副本,只会创建地址的副本, 修改任何一个副本,也同时修改其他的副 本。
传参
• 引用类型参数,按引用传参,方法修改形 参,实参也会被相应的修改;
• 值类型参数,按值传参,方法修改形参, 实参不会被修改;
• 接口成员不能有定义; • 接口的成员必须是方法,属性,事件或索
引器,不能包含常数、字段、运算符等;
接口(四)
• 只能用来被实现
class ArtStudent : Iexam,ISport { public void Exam() {……} }
接口(五)
• 接口支持多继承,在多继承中,如果两个 父接口含有同名的成员,这就产生了二义 性,在实现时需要进行显式的声明,且显 式接口成员为private。
他们的任意组合; 抽象类的抽象成员在派生类中需要用override
关键字实现
密闭方法和密闭类(一)
• 有些方法不希望被重写,有些类不希望通过继 承而被修改,那么可以用sealed去修饰;
• 基类方法不允许子类对其重写时,可以ห้องสมุดไป่ตู้声明 为virtual;
• 派生类中的方法不允许其子类对其重写,同时 该方法是override的,就可以使用sealed。
接口
接口(一)
接口的语法结构: public interface Iexam : 基接口列表 {
void Exam(); {
接口(二)
• 对接口方法的调用与类中的情况相同。如 果底层成员的命名与继承而来的高层成员 一致,那么底层成员将屏蔽掉同名的高层 成员。
接口(三)
• 接口成员访问权限为public,但不能加访问 修饰符;
索引
索引(一)
• 索引器允许类或者结构的实例按照与数组相同的方 式进行索引。 访问修饰符 类型名 this[参数列表] { get{……} set{……} }
索引(一)
• 索引器允许用户按照处理数组的方式索引 类,访问时有两种形式
➢使用索引器可以直接访问类实例; ➢将数组声明为public成员并直接访问数组的
枚举(一)
• 枚举 (enum) 是具有一组命名常量的独特的值(结 构)类型
• 每个枚举类型都有一个相应的整型类型,称为该枚 举类型的基础类型 (underlying type)。没有显式声 明基础类型的枚举类型所对应的基础类型是 int。 枚举类型的存储格式和取值范围由其基础类型确定。
• 所有枚举类型默认继承自System.Enum类型, System.Enum继承自System.ValueType。故枚举为结 构类型。
础类型的所有成员字段和函数
继承(二)
• 语法 class ChildClass : ParentClass { …… }
➢ 子类是父类的一种特殊情况或者具体情况
继承(三)
• 特殊基类Object Object类是所有类的共同基类,它是唯一
的非派生类,继承层级结构的基础。 • 规则
继承只有单继承,也就是只能继承一个父类, 当然该父类可以继承自一个祖父类,直到 object类。
结构(一)
• 结构 (struct) 是能够包含数据成员和函数成员 的数据结构。
• 结构类型的变量直接存储该结构的数据。 • 所有结构类型都隐式地从类型
System.ValueType继承。 • System.ValueType继承自System.Object。 • 结构是值类型,不需要在堆分配 • 结构类型不允许继承。结构类型不允许继承。
}
}
构造方法(一)
Child xMing = new Child();//调用构造方法
作用:为属性赋值
注:如果没有显示的定义构造方法,则会有 一个默认的无参数的构造方法;如果定义 了构造方法,则没有默认构造方法;
构造方法(二)
• 只能用new 方法名()的形式调用构造方法; • 构造方法通常声明为public; • 构造方法没有返回值类型; • 构造方法名必须与类名相同;
成员;
属性的封装
在C#程序中 我们通常使用属性对字段进行
封装
方法(一)
方法(二)
方法(三)
Public void PlayGame()//方法的声明 {
//方法的实现 Console.WriteLine(“我是头号玩家!”); }
方法(四)
• 无参方法的调用 Child.PlayBall();
结构(二)
• //用struct修饰,表示一个结构类型
• struct Point
•{

public int x;

public int y;

public Point(int x, int y)

{

this.x = x;

this.y = y;

}
•}
结构(三)
• 结构中可以定义字段、属性和方法; • 不能为结构中的字段赋初值; • 结构的构造方法中必须为所有字段赋值; • 不能为结构显示定义无参数的构造方法; • 结构类型的对象可以不实例化;
构造方法(三)
• 构造方法的重载:与普通方法的重载相同;
• 注意:当我们定义了有参构造方法后,就 不能再有默认的无参构造方法了;
构造方法(四)
对象的初始化: Child xiaozhu=new Child(){Name=“佩奇”, Age= 5};
注:类里面要包含一个无参构造方法
值类型
Int a=3; Int b=a;
• 带参方法的调用 Child.Sports(参数);
方法的重载
• 同一个类中,多个方法名字相同,但参数(类型或数量) 不同
Class Chlid
{
……
public void Sports(string sport);
{ //代码
}
public void Sports(int count);
{ //代码
• 通过指向派生类的基类引用,调用虚方法, 会根据引用所指向派生类的实际类型,调 用派生类中的同名重写方法,便是多态。
虚方法和多态(二)
重写虚方法必须具有相同的可访问性,且 基类方法必须是非private;
不能重写static方法或者非虚方法; 方法,属性,索引器,事件,都可以声明
为virtual。
枚举(二)
//:long表示基础类型是long //如果不写则默认为int enum Alignment : long {
//=也可不写,默认则是以0开始,依次加1 Left = -1, Center = 0, Right = 1 }
类与继承
继承(一)
• 为什么需要继承 减少重复的代码
• 实现继承 一个类派生于另一个基类,它拥有该基
抽象方法和抽象类(一)
• 抽象方法 abstract public void Func();
注:抽象方法不能有实体,包含抽象方法的 类必须声明为抽象类;
抽象方法和抽象类(二)
• 抽象类
abstract class Student { …… }
抽象方法和抽象类(三)
• 抽象类 用abstract修饰; 抽象类不能实例化; 抽象类中可以包含抽象成员和普通成员,以及

类与对象
类与对象
• – 类是一个样板,以操作、表示和算法的 形式完整地定义了一组对象的行为。它通 常也是面向对象语言中的模块化、封装和 数据抽象的基础。
• – 对象是类的一个实例,是一个软件单元, 它由一组结构化的数据和在其上的一组操 作构成。
类与对象
类与封装
封装
• 隐藏对象的信息 • 留出访问的接口
隐藏方法
• 用与基类成员名称相同的成员来屏蔽基类成员 • 语法: ➢ 屏蔽数据成员:在派生类中声明名称和类型
相同的成员; ➢ 屏蔽方法成员:在派生类中声明新的带有相
同方法签名的成员; ➢ 添加new关键字,否则可能报错;
构造方法
• 派生类对象中,包含基类部分,在执行派 生类的构造方法之前,将会隐式或显式的 调用基类构造方法;
• 调用顺序:
实例成员 初始化
基类构造 方法
派生类构 造方法
类与多态
多态
• 基类描述了共同的属性和行为。但是,子 类具有差异性,统一的行为在基类和派生 类中也有所区别。
• 为了兼顾共性又能体现出个性,我们可以 使用虚方法和多态的武器。
虚方法和多态(一)
• 声明为virtual的方法就是虚方法。基类的 虚方法可以在派生类中使用override进行 重写。
相关主题