C#程序设计教程——类,接口与结构03

一,类,字段,方法

1,定义类中的字段和方法

(1):类:class 类名
(2):字段:类型名 字段名;如,int age;
表示事物的性质状态
(3):方法:
修饰符 返回值类型 方法名(形式参数列表)
{
方法体
}
表示类的动态行为,即类具有的功能和操作

2,构造方法与析构方法

(1)构造方法

public Person(string name int age)
{
this.name = name;
this.age = age;
}

1:构造方法的方法名和类名相同
2:构造方法没有返回类型,也不能写void
3:构造方法的主要作用是完成对象的初始化工作
4:构造方法一般不能显示地直接调用,而是用new来调用
5:在创建(new)一个类的新对象时,系统会自动调用该类的构造方法为新对象初始化

(2)默认构造函数

默认构造方法:
1:不带参数
2:方法体为空
public Person()
{ }

(3)析构函数

~类名(){…}
1:用~开始的并且与类同名的方法
2:不带参数
3:不能写返回类型
4:不能有修饰符

3,对象的创建与使用

类名 变量名 = new 构造方法(参数)
访问和调用一个对象的字段和方法用“.”

4,方法的重载overloading

(1):普通方法的重载:

1:方法的含义相同
2:参数不同
3:方法名相同

(2):构造方法的重载

1:参数个数,类型或类型顺序不同

(3):签名signature

签名:方法名称,参数类型,参数修饰符,不包括返回类型,参数名称

5,使用this

(1):使用this来访问字段及方法
(2):使用this解决局部变量与字段同名的问题
(3):构造方法中,用this调用另一种构造方法
(4):使用this的注意事项

二,属性,索引器

1,属性property

属性:用来表达事物的状态,它可以获取和设置事物的状态。属性首字母大写,字段首字母小写

(1):属性的定义:

修饰符 类型名 属性名
{
get{}
set{}
}

(2),属性的访问

对象.属性

(3),属性和字段的比较

(1):若在类的内部记录事物状态信息,用字段变量
(2):字段变量用private修饰,防止对外使用
(3):对外公布事物的状态信息,使用属性
(4):属性一般与某个或某几个字段变量有对应关系

(4),属性的简写
自动生成

class Person
{
public string Name{set;get}
public in Age{set; get;}
}

(5),对象初始化时直接对属性赋值

如:
Person p = new Person{Name=”tom“,Age= 18}

(6),匿名类型anonymous classes

如:
new {Title=”Java“,Author= ”tang“,Price=1.5}

2,索引器

(1),索引器的定义与使用
(2),索引器的重载
(3),属性与索引器的比较
(4),索引器的应用举例

三,类的继承

1,派生子类

class Student :Person
{
}

2,字段的继承,添加与隐藏

(1):字段的继承:子类可以继承父类的所有成员
(2):字段的添加:public int a;
(3):字段的隐藏:在子类的同名字段的声明前加修饰符new,如,new public int a;

3,方法的继承,添加与覆盖

(1)方法的继承:父类的方法可以被子类自动继承
(2)方法的添加:
(3)重载与父类同名的方法:同名但是参数列表(签名)不同
(4)新增与父类同名的方法:同名且参数列表相同,加new,如;new void sayHi()
(5)重写与父类同名的方法:父类方法用virtual修饰,子类用overriding修饰

4,使用base

(1):使用base访问父类的方法和字段:被子类覆盖的父类方法,用base.父类方法
(2):使用父类的构造方法:base()放在构造方法的{}前面,并使用冒号:
如,Student(string name,int age,string school):base(name,age)
{
this.school=school;
}
(3):使用base注意事项:
1,通过base可以访问直接和间接父类中定义的字段和方法
2,构造方法中调用父类的构造方法时,base()指直接父类的构造方法,不能指间接父类的构造方法,构造方法不能继承
3,base指的是对象,不能在static环境中使用,包括,静态变量,静态方法,static构造方法

5,父类与子类的转换以及as运算符

父类对象和子类对象的转化原则
1,子类对象可以看成是父类的一个对象
2,父类对象不能被当作是其某个子类的对象
3,如果一个方法的形式参数定义的是父类对象,那么调用这个方法时,可以使用子类对象作为实际参数
4,如果父类对象引用指向的实际是一个子类对象,那么这个父类对象的引用可以用强制类型转换化成子类对象的引用
as运算符
表达式 as 类型
1,只能用于引用型的表达式
2,运行时,发生不能转换,强制类型转换抛出异常,as运算符则使运算的结果为null

6,属性,索引器的继承

子类中定义与父类中属性,索引器同名的属性,索引器时:
(1):在子类中的同名属性用new修饰,隐藏父类同名属性
(2):在父类中的属性用virtual修饰,子类中用overriding修饰,称重写

四,修饰符modifier

1,访问控制符

(1)类的成员的可访问性

包括字段,方法,属性,索引器等
1:public:含义是”无限制访问“
2:protected internal:同一程序集内或子类可访问
3:protected:同类及其子类可访问
4:internal:同一程序集内可访问
5:private:同类中可访问
注意:默认为private

(2)处理继承性与可访问性
(3)其他语法元素的可访问性控制符
(4)嵌套中的可访问性
(5)可访问性约束

2,static

(1)static字段

静态字段保持在一个类的内存区字段的公共存储单元

(2)static方法

仅属于类的静态方法
1:非静态的方法是属于某个对象的方法,static的方法是属于整个类的
2:不能操作和处理属于某个对象的成员变量,只能处理整个类中的成员变量
3:不能访问实例变量,不能使用this,base
4:使用类名,不能使用某一个具体的对象名
注意:所有被static修饰的功能成员(方法,属性,构造函数,析构函数)都具以上特点

(3)static构造方法
(4)static类及using static类

3,const及readonly

(1)const修饰的类成员

修饰符,const 类型 常量名 = 常量表达式

(2)const修饰局部变量
(3)readonly字段

4,sealed及abstract

(1)sealed类

1:不能被继承

(2)abstract类

1:抽象类没有具体对象的概念类,不能实例化
2:必须被继承,然后创建其子类的对象实例
3:抽象类是所有子类的公共属性的集合
4:抽象类可以有构造函数,可以被子类调用
5:定义:
abstract class 类名
{
。。。。
}

(3)abstract方法,属性,索引器

1:抽象方法为所有子类定义一个统一接口
2:定义:abstract 类型 方法名(参数列表);

5,new,virtual,override

(1)new

new用来修饰类的字段,常数,方法,属性,索引器,事件等成员,用来隐藏父类的同名,同签名的成员

(2)virtual和override

virtual可以修饰方法,属性,索引器,成为虚成员,在子类中被覆盖override

(3)sealed override

在子类中防止进一步对父类的虚方法覆盖

6,一个应用模型——单例模式

五,接口

1,接口的概念

定义了若干个抽象方法,属性,索引器,事件,形成一个抽象集合
(1):实现不相关类的相同行为,不需要考虑这些类的层次关系
(2):指明多个类需要实现的方法
(3):了解对象的交互界面,不需要了解对象多对应的类

2,定义接口

(1):使用interface关键字,,接口成员必须是抽象的方法,属性,,事件或索引器,都没有实现体
(2)定义接口:
public interface IList:ICollection,IEnumerable
{
bool IsFixedSize{get;}
bool IsReadOnly{set;}
object this[int index]{get;set;}
int Add(object value);
void Clear();
}

3,实现接口

1:接口可以被结构体和类实现
2:在类声明时,用冒号(:)表面父类和要实现的接口,父类在前,
3:如果类实现了某个接口,则一点能在该类中找到与该接口的各个成员相对应的成员,也能找到该接口所有父接口的所有成员,这些成员可以是在本类中定义的,也可以是从本类的父类中继承过来的
4:抽象类实现接口时,也要为所有成员提供实现程序,抽象类可以把接口方法映射到抽象方法中
5:一个类实现多个接口,若把接口看作特殊的类,即实现了多重继承
6:接口的抽象方法的访问控制是public,类的实现方法时也要是public
7:用类实现接口
class 类名 :[父类,] 接口1,接口2
{
。。。
}

4,对接口的引用

5,显示接口成员的实现

六,结构,枚举

1,结构

(1)结构的声明和使用

1:是一种对数据及功能进行封装的数据结构
2:声明:
struct 结构名 [:接口名字]
{
。。。。
}

(2)结构在使用时的限制

2,枚举

应用于有多个选择情况的场合

(1)枚举的声明

enum 枚举名 [:基本类型名]
{
枚举成员 [ = 常数表达式],
}

(2)枚举量的运算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值