在面向对象中的系统就是依靠时间来驱动其运转的,新的事件一旦发生,系统中的相关对象的操作开始执行,结果是系统的状态就会发生改变。
abstraction
, encapsulation and information hiding
, ,polymorphism
多态性是指在基类中定义的数学或方法被派生类继承后,可以表现出不同的行为特征,对同一消息会做出不同的响应。
为了实现多态性,通常需要在派生类中更改从基类中继承来的方法。这种为了替换积累的部分内容而在派生类中重新定义的方法,称为覆盖。这样一来,不同的对象可以响应同名的消息(方法)来完成特定的功能,带其具体的实现却可以不同。
1
. 类的声明
2
. 类的实例
声明 | 含义 |
---|---|
public |
|
internal |
只允许当前程序集内部使用 |
protected |
只允许该类及其派生类使用 |
private |
|
protected internal |
结合之 |
命名空间不允许使用访问修饰符。
值类型
引用类型
装箱和拆箱
引用类型也允许类型转换
装箱[隐式转换]
int i = 100;
object x = i;
拆箱[必须是显式转换]
int i = 100;
int k= (int)x;
数据成员 | 其他 |
---|---|
常量,字段,属性 | 方法,构造函数,索引器,事件 |
1
. 常量
符号变量,编译时即可确定值
public const double pi = 3.14;
2
. 字段
字段表示累的成员变量,字段的值代表一个对象的数据状态。 换一种新说法而已
需要注意
1. 字段通过readonly
关键字可设置为只读。
2. 只读字段运行时确定值;
常量和字段描述了类的数据信息 |
---|
限制对字段的读写操作,或验证数据的正确性和一致性。
get
, set
访问器
public double R
{
get
{
return r;
}
set{
if(value <= 0)
r = 0;
else
r = value;
}
}
1
. 方法的声明
修饰符包括 public
、protected
、private
、internal
2
. 方法的调用
但C#允许重新定义默认构造函数
注意
string
和 object
虽然是引用型数据,但是从表现形式上来看,其具有按值传参的效果。
当值类型和 string
类型参数要按引用传参是,可以通过 ref
关键字来声明引用参数,无论是形参还是实参,只要希望传递数据的引用,就必须添加 ref
关键字。
// 声明
public string Swap(ref int x, ref int y)
// 调用
x.Swap(ref a, ref b)
// 声明
public void SplitPath(string path, out string dir, out string filename)
// 调用
string dir, file;
a.Split(path, out dir, out file)
通过out关键字声输出参数
ref
,
out
声明时需要有类型标识,调用时只需要变量名就可以了。它们都是针对普通变量。
引用类型参数总是按引用传递的,所以引用类型参数传递不需要使用ref
或out
关键字(string 除外)。引用类型参数的传递,实际上是将实参变量对数据的引用复制给了形参变量,所以形参变量与实参变量共同指向同一个内存区域。
数组也是引用类型参数,把数组作为参数传递时,也是引用传参。但把数组作为参数,有两种使用方式:一种是在形参数组前不添加params
修饰符,另一种是在形参数组前添加params
修饰符。不添加params
修饰符时,所对应的实参必须是一个数组名。添加params
修饰符时,所对应的实参可以是数组名,也可以是数组元素值得列表,此时,系统将自动把各种元素值组织到形参数组中。
// 声明
int Max(int[] a)
{
}
// 调用
int n = Max(x);
// 声明
int Max2(params int[] a)
{
}
// 调用
int n = Max2(1, 2, 3, 4, 5);
public Student(string name):this(name, 20);
new
运算符创建对象并要求获得内存;~fun()
{ }
无法继承或重载析构函数!
不推荐使用,性能较差。