`

c#中的interface abstract 与 virtual

阅读更多

interface用来声明接口
1.只提供一些方法规约,不提供方法主体.如:
publicinterfaceIPerson
{
voidgetName();//不包含方法主体
}
2.方法不能用publicabstract等修饰,无字段变量,无构造函数。
3.方法可包含参数。如
publicinterfaceIPerson
{
voidgetAge(strings);
}

一个例子(例1):
publicinterfaceIPerson
{
IPerson();//错误
stringname;//错误
publicvoidgetIDcard();//错误

voidgetName();//right
voidgetAge(strings);//right
}

实现interface的类
1.与继承类的格式一致,如publicclassChinese:IPerson{}
2.必须实现interface中的各个方法

例2,继承例1
publicclassChinese:IPerson
{
publicChinese(){}//添加构造
publicvoidgetName(){}//实现getName()
publicvoidgetAge(strings){}//实现getAge()
}

abstract声明抽象类、抽象方法
1.抽象方法所在类必须为抽象类
2.抽象类不能直接实例化,必须由其派生类实现。
3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,这点跟interface中的方法类似


publicabstractclassBook
{
publicBook()
{
}

publicabstractvoidgetPrice();//抽象方法,不含主体
publicvirtualvoidgetName()//虚方法,可覆盖
{
Console.WriteLine("thisisatest:virtualgetName()");
}
publicvirtualvoidgetContent()//虚方法,可覆盖
{
Console.WriteLine("thisisatest:virtualgetContent()");
}
publicvoidgetDate()//一般方法,若在派生类中重写,须使用new关键字
{
Console.WriteLine("thisisatest:voidgetDate()");
}
}

publicclassJavaBook:Book
{
publicoverridevoidgetPrice()//实现抽象方法,必须实现
{
Console.WriteLine("thisisatest:JavaBookoverrideabstractgetPrice()");
}
publicoverridevoidgetName()//覆盖原方法,不是必须的
{
Console.WriteLine("thisisatest:JavaBookoverridevirtualgetName()");
}
}

测试如下:
publicclasstest
{
publictest()
{
JavaBookjbook=newJavaBook();
jbook.getPrice();//将调用JavaBook中getPrice()
jbook.getName();//将调用JavaBook中getName()
jbook.getContent();//将调用Book中getContent()
jbook.getDate();//将调用Book中getDate()

}
publicstaticvoidMain()
{

testt=newtest();
}
}

virtual标记方法为虚方法
1.可在派生类中以override覆盖此方法
2.不覆盖也可由对象调用
3.无此标记的方法(也无其他标记),重写时需用new隐藏原方法

abstract与virtual:方法重写时都使用override关键字
interface中的方法和abstract方法都要求实现(转自http://hi.baidu.com/fanxufeng/blog/item/12535e16d6e2854a21a4e90e.html风飘飘)

分享到:
评论

相关推荐

    c#中的interface abstract与virtual介绍

    abstract 与virtual : 方法重写时都使用 override 关键字,interface中的方法和abstract方法都要求实现

    override abstract virtual interface比较

    override abstract virtual interface比较

    01:详解C#中的反射.pdf

    (3)使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。 (4)使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(如pulic 或...

    陈广C#程序设计入门与实例视频教程28-34.rar

    28-virtual.swf 29-abstract.swf 30-interface(1).swf 31-interface(2).swf 32-interface(3).swf 33-IComparable.swf 34-IComparer.swf

    c#学习笔记.txt

    在 C# 中,类与结构在语义上是不同的。结构是值类型,而类是引用类型。 2, 装箱和拆箱(取消装箱) 装箱是值类型到 object 类型或到该值类型所实现的任何接口类型的隐式转换。将一个值的值装箱会分配一个对象实例并将...

    C#中多态现象和多态的实现方法

    在.NET中用于实现多态性的关键词有virtual、override、abstract、interface。 一、virtual实现多态   shape类是通用的基类,draw是一个虚方法,每个派生类都可以有自己的override版本,在运行时可以用shape类的变量...

    C# 语言规格说明(English Edition第五版)

    1.6.6.4 Virtual, override, and abstract methods 18 1.6.6.5 Method overloading 20 1.6.7 Other function members 21 1.6.7.1 Constructors 22 1.6.7.2 Properties 23 1.6.7.3 Indexers 23 1.6.7.4 Events 24 1.6...

    Professional C# 3rd Edition

    Abstract Classes and Functions 115 Sealed Classes and Methods 115 Constructors of Derived Classes 116 Modifiers 122 Visibility Modifiers 122 Other Modifiers 123 Interfaces 123 Defining and ...

    C# for CSDN 乱七八糟的看不懂

    C#关键字 关键字 abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach ...

    亮剑.NET:.NET深入体验与实战精要清晰版及源码

     2.4 sealed、new、virtual、abstract与override  2.5 abstract class与interface  2.6 公共变量与属性的区别  2.7 参数修饰符params、out和ref的区别  2.8 值类型和引用类型的区别 . 2.9 结构与类的区别...

    亮剑.NET深入体验与实战精要.part4(完)

     2.4 sealed、new、virtual、abstract与override  2.5 abstract class与interface  2.6 公共变量与属性的区别  2.7 参数修饰符params、out和ref的区别  2.8 值类型和引用类型的区别 . 2.9 结构与类的区别...

    亮剑.NET深入体验与实战精要.part3

     2.4 sealed、new、virtual、abstract与override  2.5 abstract class与interface  2.6 公共变量与属性的区别  2.7 参数修饰符params、out和ref的区别  2.8 值类型和引用类型的区别 . 2.9 结构与类的区别...

    CSharp 3.0 With the .NET Framework 3.5 Unleashed(english)

    Abstract Class and Interface Differences 319 Implementing Interfaces 320 Defining Interface Types 320 Implicit Implementation 322 Explicit Implementation 333 Interface Mapping 339 ...

    net学习笔记及其他代码应用

    24.在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。 答:string str = null 是不给他分配内存空间,而string str = \"\" 给它分配长度为空字符串的内存空间。 25.请详述在...

    week-1:计算+ C#

    自述文件 重击 命令 pwd =打印当前目录/路径 ...virtual =具有代表性的结构,可以按原样使用或转换为特定用途 override =动态/虚拟结构的规范转换 abstract =表示概念的描述性结构,定义实现的签名 sealed =不适

    亮剑.NET深入体验与实战精要3

    2.4 sealed、new、virtual、abstract与override 87 2.5 abstract class与interface 91 2.6 公共变量与属性的区别 93 2.7 参数修饰符params、out和ref的区别 96 2.8 值类型和引用类型的区别 100 2.9 结构与类的区别 ...

    亮剑.NET深入体验与实战精要2

    2.4 sealed、new、virtual、abstract与override 87 2.5 abstract class与interface 91 2.6 公共变量与属性的区别 93 2.7 参数修饰符params、out和ref的区别 96 2.8 值类型和引用类型的区别 100 2.9 结构与类的区别 ...

    CoreAOP:.NET Core的面向方面的编程

    } 通过实现基类来定义属性public abstract class AspectAttribute : Attribute , IAspect{ public virtual void OnCreate ( Type createdType ) { } public virtual object [] OnEnter ( MethodInfo mi , object [] ...

Global site tag (gtag.js) - Google Analytics