1.抽象类
抽象类与抽象函数需要声明为abstract。
抽象类不能实例化(类是一个模板,抽象类就是一个不完整的模板,我们不能使用不完整的模板去构造对象,但可以声明对象),可以包含普通函数和抽象函数。
抽象函数只有函数定义没有函数体。
注意:
一个类中如果有了抽象函数,这个类就要加上abstract变为抽象类。
继承了抽象类的类必须去实现抽象方法,要用override关键字。
2.密封类和密封方法
密封类:
在类前加上sealed关键字
密封方法:
只能密封重写的方法(有override关键字),即只能在子类中将方法密封
3.派生类的构造方法
- 调用无参数的构造方法
在子类中调用父类的默认构造方法(无参),会先调用父类的,再调用子类的。
例如:
class BigGod
{
public BigGod()
{
Console.WriteLine("This is BigGod");
}
}
class SmallGod:BigGod
{
public SmallGod():base()//显示声明调用父类的构造方法
{
Console.WriteLine("This is SmallGod");
}
}
若
class Program
{
static void Main(string[] args)
{
SmallGod god = new SmallGod();
}
}
输出为
注意:
当没有在子类的构造方法中显示声明调用父类的构造方法,默认会调用父类中的无参构造方法。
- 调用有参数的构造方法
同样是先调用父类的构造方法,再调用子类的构造方法。在显示声明调用父类的构造方法时传参。
例如:
class BigGod
{
public int x;
public BigGod(int x)
{
this.x = x;
Console.WriteLine("This is BigGod"+' '+this.x);
}
}
class SmallGod:BigGod
{
public int y;
public SmallGod(int y,int x):base(x)
{
this.y = y;
Console.WriteLine("This is SmallGod" + ' ' + this.y);
}
}
若
class Program
{
static void Main(string[] args)
{
SmallGod god = new SmallGod(5, 6);
}
}
输出为
4.访问修饰符
public和private修饰字段和方法的时候,表示该字段或方法能不能通过对象去访问,只有public才可以通过对象访问,private只能在类模板内部访问
protected当没有继承的时候,它的作用和private一样,即外界不能通过对象去访问,当有继承的时候,其表示可以被子类访问的字段或方法。
static可以修饰字段或方法,修饰字段时表示这个字段是静态的数据,叫静态字段或静态属性;修饰方法时叫静态方法或静态函数。
当我们构造对象时,对象中只包含了普通字段,不包含静态字段(即对象访问不到类中的静态成员)。使用static修饰的成员,只能通过类名访问
例如:
class God
{
public static int z;
}
class Program
{
static void Main(string[] args)
{
God god;
god.z = 666;//对象访问不到
God.z = 666;//通过类名访问
}
}
5.定义和实现接口
- 定义接口:
public interface NameInterface
{
public type Name();
…
} - 实现接口:
public/private/protected class NameClass:NameInterface
{
…
}
定义一个接口在语法上跟定义一个抽象类完全相同,但不允许提供接口中任何成员的实现方式,一般情况下,接口只能包含方法,属性,索引器和事件的声明。接口不能有构造函数,不能有字段,不允许运算符重载,不允许声明成员的修饰符,接口成员都是公有的。
接口可以彼此继承,其方式与类的继承方式相同
例如:
public interface Interface1
{
void Method1();
}
interface Interface2:Interface1
{
void Method2();
}