方法定义中可以使用的修饰符有:
a) new
b) public
c) protected
d) internal
e) private
f) static
g) virtual
h) override
i) extern
j) abstract
对于virtual,override,new,extern,abstract这些修饰符在以前很少用到,今天就对这些做点了解。
virtual修饰符:virtual修饰符可以实现面向对象的多态性编程。当该修饰符修饰的方法在基类中时,如果在另一个类中对该基类的派生类(对该方法进行重载),进行了实例化,那么此时将执行派生类中的方法!在没有virtual修饰符的方法,同样的情况将执行基类中的方法。
override修饰符:该修饰符可以在派生类中实现基类中同名方法的重载或实现基类中同名的虚拟方法
new修饰符:该修饰符表示派生类中与基类同名的的成员是一个新成员而不是重载成员。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 几个方法修饰符的应用
{
public class Items
{
protected stringname;
protected stringcode;
public voiddisplay()
{
Console.WriteLine ("Inside base class no virtual");
}
public virtual void display1()
{
Console.WriteLine("Inside base class have virtual ");
}
}
public class Books :Items
{
public new void display() //new修饰符显示隐藏从基类继承的成员
{
Console.WriteLine ("Inside Books class ,display");
}
public override void display1()
{
Console.WriteLine("Inside Books class,display1");
}
}
class Program
{
static voidMain(string[] args)
{
Items i1 = new Books() ;
i1.display(); //输出结果是“Insidebase class no virtual”
i1.display1(); //输出结果是“InsideBooks class,display1”;
Console.ReadKey ();
}
}
}
在这段代码中,Books类中display()无法使用override,display1()方法如果不用override,那么在主类中的i1.display1()的输出结果为基类中display1()的结果。在实现多态性时,virtual和override应是配套使用。
extern修饰符:extern修饰符表示方法的实现代码不在本段C#代码段中,而在另一个指定的外部文件(.dll文件)中。本段代码仅有该方法的声明和调用语句。
Class extern_class
{
[DllImport(“User32.dll”)] // 指定extern方法所在的文件位置
Public staic extern int mess(); //方法声明,使用了static;
Public static void main()
{
mess(); //方法调用;
}
}
注意:外部方法具有DllImport代码属性时,该方法的声明必须使用static修饰符;不要把extern修饰符和abstract修饰符组合到一起来声明一个外部方法。
abstract修饰符:abstract修饰符表明形影的方法在派生类中实现。只允许在抽象类中声明抽象方法,声明抽象方法时不能使用virtual修饰符。