virtual,override,new ,extern,abstract修饰符
2015-05-09 16:56
148 查看
方法定义中可以使用的修饰符有:
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修饰符。
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修饰符。
相关文章推荐
- virtual override new
- 把new、virtual、override说透
- 也谈.net下面的new、virtual和override(一)
- abstract、virtual、override 和 new(转)
- C# 关键字 abstract, virtual, override, sealed, new
- 把new、virtual、override说透
- C#类的多态性:base、new、override、virtual
- 温故而知新:new与override的差异以及virtual方法与abstract方法的区别
- 谈谈C#中的三个关键词new , virtual , override(装载 Winner.Net)
- sealed、new、virtual、abstract与override 总结
- new,virtual,override,interface,delegate,event-------------C#——方法实现总结
- c#中abstract、override、new、virtual、sealed使用和示例
- 谈谈C#中的三个关键词new , virtual , override
- call vs callvirt; virtual, override, new
- new virtual abstract sealed override
- 继承(对象生命周期) + 覆盖[new](索引函数) + 重载[virtual/override]
- 浅谈C#中new、override、virtual关键字的区别
- sealed、new、virtual、abstract与override 总结
- 把new、virtual、override说透
- (教学思路 C#之类八)多态性:base、new、override、virtual