C# 类
1,继承,若基类为带参构造函数,则子类也必须有带参构造函数。
若基类有无参和有参构造函数,则基类可以不提供有参构造函数。
2,构造函数可以被重载(在本类中),可以被显示调用(在构造函数的构造列表中),不能被继承,不可以在其它任何地方调用。
class CTest
{
//重载------------------------------------------------------
CTest(int x, int y){}
CTest(int x) : this(x, 0) //显示调用2参的构造
{
}
//------------------------------------------------------------
}
3,构造函数与析构函数都是不可以被继承的,虽然会被自动调用或在构造列表中手动调用。
4,静态构造函数
静态构造函数是C#的一个新特性,当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,自动被调用。
5,运算符重载
C#要求所有的运算符重载都声明为public和static,这表示它们与它们的类或结构相关联,而不是与实例相关联
不能被重载的运算符:赋值,?,指针,sizeof,is,typeof,new
赋值运算符包括 =, +=, -=, *=, %=,
struct CSTest
{
public int posx;
public static CSTest operator + (CSTest o1, CSTest o2)
{
CSTest ost = new CSTest();
ost.posx = o1.posx + o2.posx;
return ost;
}
public static CSTest operator - (CSTest ot)
{
ot.posx = -ot.posx;
return ot;
}
}
class Program
{
static void Main(string[] args)
{
CSTest ostn1 = new CSTest();
CSTest ostn2 = new CSTest();
ostn1.posx = 1;
ostn2.posx = 2;
CSTest ostn3 = ostn1 + ostn2;
ostn3 = -ostn3;
Console.WriteLine(ostn3.posx);
}
}
6,virtual 与 abstract 区别
abstract class abclass
{
virtual protected void Func() { } //定义虚函数
abstract protected void FFunc();//定义纯虚函数
}
class CA : abclass
{
protected override void Func()
{
}
protected override void FFunc()
{
}
}