一.类的访问权限
访问修饰符:internal ;public ;abstract 或者internal abstract
public abstract;sealed或internal sealed
internal class MyClass
{
}
//抽象类,不能被实例化,只能被继承
abstract class ClassA
{
}
//密封类,只能被实例化,不能被继承
sealed class ClassB
{
}
二.字段方法
字段:由三部分组成----访问修饰符,字段的类型和字段名。
属性:是对字段的扩充,保证内部成员的完整性(这样字段可以定义为私有,通过属性赋字段值 取字段值)
{//字段
public int a;
public int b=1;
public static int c=2;
public const int d=3;
public readonly int e;//只读类型
}
//属性
{
private string name;
private int age;
public string Name
{
get{ return name;}
}
public int Age
{
set{ age = value;}
get{return age;}
}
}
只读属性:1.可以不写set方法 2.可以定义set为private
只写属性:1.可以不写get方法 2.可以定义get为private
class ClassF
{
private int x;
private int y;
//只读
public int X
{
get{ return x;}
// private set{ x = value;}
}
//只写
public int Y
{
set{ y = value;}
private get{ return y;}
}
//重载
public void print(int x)
{
Console.WriteLine (x);
}
public void print(string s)
{
Console.WriteLine (s);
}
}
二.构造方法
构造函数具有以下特点。
1:构造函数可以进行方法重载。
2:如果没定义的话,会默认产生一个空的构造函数
3:构造函数必须和类同名
4:不允许返回类型
1.一般构造方法(和c++一样性质)
2.静态构造方法(下边还会详细讲解)
//没有访问修饰符,无返回值,只能无参,静态无重载,
static Person()
{
sex = true;
Console.WriteLine ("static method");
}
Person q= new Person ();//1.第一次创建对象时调用,以后都不调用,只调用一次
Person h= new
Console.WriteLine (Person.sex);//2.第一次引用这个对象,只触发一次
总结:1.静态构造函数不会替代默认构造函数。
2.创建第一个对象时,会调用这个静态构造函数。
3.第一次引用对象
3.析构函数
3:无法继承或者重载析构函数
4:无法显示的调用析构函数,由垃圾回收器自动调用
5:析构函数即没有修饰符也没有参数
三.索引器
{
private int[] array=new int[10];
public int this [int index]
{
set{ array[index]=value;}
get{ return array[index];}
}
}
Person2 p2 = new Person2 ();
p2 [0] = 1;
p2 [1] = 2;
Console.WriteLine (p2[1]);
四.结构体
静态构造函数用于初始化静态数据成员。
静态构造函数有如下特点: 1、静态构造函数不能有访问修饰符和参数;
2、静态构造函数不能访问实例成员; (通过类名访问)
3、静态构造函数无法直接进行调用
3.结构的多态和可继承性
结构直接派生自System.ValueType,间接派生自System.Object,但结构是隐式密封的,不能作为基类再派生出其他的结构,也不能从类派生,但可以从接口派生。
结构的特性:
1、结构类型总是隐式密封的,因此在定义结构时不能使用sealed和abstract关键字;
2、因为结构不能作为基类,结构的成员不能使用如下访问修饰符:protected和protected internal;
3、结构的函数成员不能声明为abstract和virtual,但是可以使用override关键字,用以覆写它的基类System.ValueType中的方法。
1:类定义使用class,结构体使用struct
2:结构体中不可对声明的字段进行初始化,类可以
3:结构体中,无论我们有没有定义构造函数,隐式的构造函数一直存在(即使定义了有参的构造函数,系统提供的无参构造函数仍然存在)
4:结构体不能显式的定义无参数的构造函数
5:结构体构造函数必须为所有的字段赋值
6:创建结构体对象可以不使用new,类必须得使用
7:结构体不能继承结构或者类,但可以实现接口;类可以继承类但不能继承结构,可以实现接口
8:类是引用类型,结构体是值类型
9:结构体不能定义析构函数,类可以
10:不能用 abstract或者sealed修饰结构体,而类可以