c#中的interface abstract与virtual

单身逃亡444

单身逃亡444

2016-01-29 12:57

c#中的interface abstract与virtual,c#中的interface abstract与virtual

interface用来声明接口1.只提供一些方法规约,不提供方法主体 如 public interface IPerson { void getName();//不包含方法主体 }2.方法不能用public abstract等修饰,无字段变量,无构造函数。3.方法可包含参数 如 public interface IPerson { void getAge(string s); }
一个例子(例1): public interface IPerson { IPerson(); //错误 string name; //错误 public void getIDcard();//错误
void getName(); //right void getAge(string s); //right }
实现interface的类1.与继承类的格式一致,如 public class Chinese:IPerson{}2.必须实现interface中的各个方法
例2,继承例1 public class Chinese:IPerson { public Chinese(){} //添加构造 public void getName(){} //实现getName() public void getAge(string s){} //实现getAge() }
abstract声明抽象类、抽象方法1.抽象方法所在类必须为抽象类2.抽象类不能直接实例化,必须由其派生类实现。3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,这点跟interface中的方法类似
如 public abstract class Book { public Book() { }
public abstract void getPrice(); //抽象方法,不含主体 public virtual void getName() //虚方法,可覆盖 { Console.WriteLine("this is a test:virtual getName()"); } public virtual void getContent() //虚方法,可覆盖 { Console.WriteLine("this is a test:virtual getContent()"); } public void getDate() //一般方法,若在派生类中重写,须使用new关键字 { Console.WriteLine("this is a test: void getDate()"); } }

public class JavaBook:Book { public override void getPrice() //实现抽象方法,必须实现 { Console.WriteLine("this is a test:JavaBook override abstract getPrice()"); } public override void getName() //覆盖原方法,不是必须的 { Console.WriteLine("this is a test:JavaBook override virtual getName()"); } }
测试如下: public class test { public test() { JavaBook jbook=new JavaBook(); jbook.getPrice(); //将调用JavaBook中getPrice() jbook.getName(); //将调用JavaBook中getName() jbook.getContent(); //将调用Book中getContent() jbook.getDate(); //将调用Book中getDate() } public static void Main() {test t=new test(); } }
virtual标记方法为虚方法1.可在派生类中以override覆盖此方法2.不覆盖也可由对象调用3.无此标记的方法(也无其他标记),重写时需用new隐藏原方法
abstract与virtual: 方法重写时都使用 override 关键字interface中的方法和abstract方法都要求实现
展开更多 50%)
分享

猜你喜欢

c#中的interface abstract与virtual

电脑网络
c#中的interface abstract与virtual

C#中接口(interface)的理解

编程语言 网络编程
C#中接口(interface)的理解

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

走出abstract class与interface的困惑

编程语言 网络编程
走出abstract class与interface的困惑

深入理解abstract class和interface

编程语言 网络编程
深入理解abstract class和interface

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

java abstract class interface之间的区别介绍

编程语言 网络编程
java abstract class interface之间的区别介绍

C#中的“装箱”与“拆箱”

电脑网络
C#中的“装箱”与“拆箱”

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

无法将回调函数放在类中? - PHPchina

无法将回调函数放在类中? - PHPchina

c#重点知识详解(六)

c#重点知识详解(六)
下拉加载更多内容 ↓