---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
1、静态类和静态类成员
静态类和静态类成员用于创建不必依赖类的实例就能够访问的数据和行为。
1.1当类中没有依赖对象标志的数据或行为时,可以使用静态类
静态类的特点:(1)仅包含静态成员(2)不能被实例化(3)是密封的(4)不能包含实例构造函数,可以有静态构造函数对静态字段初始化。(5)不可被继承
1.2静态成员
静态成员与实例成员不同,静态成员是公共的,属于这个类型,不会根据此类型的对象状态的变化而变化。另外注意一点,静态方法和属性只能访问静态字段和静态事件。静态成员在第一次访问且在任何静态构造函数(如果调用了的话)之前初始化。
2、构造函数和析构函数
2.1使用实例构造函数
任何时候只要创建类或者结构的实例,就会调用其构造函数,类和结构可以有多个接受不同参数的构造函数(即重载)。
通过设置构造函数为私有的,还可以限制实例化,如单例模式:
class MyClass
{
static MyClass instance;
public static MyClass Instance
{
get
{
if (instance == null)
{
instance = new MyClass();
}
return instance;
}
}
private MyClass() { }
}
结构类型的构造函数与类的构造函数类似,但是结构不能包含显式默认构造函数(非静态类如果没有声明构造函数,C#编译器会自动提供一个无参公共的默认构造函数),编译器会会为结构提供一个构造函数,用于初始化结构中的字段为默认值。当结构用new运算符时,其实就是调用了其构造函数,而不是像类一样,在堆中分配了地址。
int i =new int();//合法,i=0
Console.Write(i);
int i;
Console.Write(i);//不合法
但是对于值类型来说,调用构造函数不是必须的,可以直接为其赋值。
带参数的构造函数必须通过new语句或者base语句来调用,如:
public class MyBase
{
public int value;
public MyBase(int value)
{ this.value = value; }
public MyBase(int value, int x)
{ this.value = value * x; }
}
public class MySub : MyBase
{
public MySub(int value)
: base(value)
{...}
}
在派生类中,如果不使用base关键字来显式调用基类构造函数,且基类提供了默认构造函数,则将隐式调用默认构造函数,下面的构造函数声明在效果上相同:
先执行基类构造函数,再执行自身构造函数
public MySub(int value)
: base()
{...}
public MySub(int value)
{...}
如果基类没有提供默认(即无参ÿ