当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > c#中的interface abstract与virtual

ASP.NET
一个无刷新效果定时自动更新页面的例子
ASP.NET2.0的控件状态和视图状态探讨
用好ASP.NET 2.0的URL映射
详解:如何在.NET中访问MySQL数据库?
如何实现Asp与Asp.Net共享Session
利用.net的强大功能发送email
.NET中加密与解密QueryString的方法
Asp.net生成htm静态文件的两种途径
C#定时器的使用
从XML文件中读取数据绑定到DropDownList
ASP.NET 2.0 里输出文本格式流
用.net动态创建类的实例
.Net下的MSMQ的同步异步调用
ASP.NET 2.0实现防止同一用户同时登陆
asp.NET自定义服务器控件内部细节
组合.NET数据控件构建强大用户接口
用ASP.NET 2.0 FormView控件控制显示
菜鸟也学习ASP.NET如何读取数据库内容
教你简单方便获取Web设计的免费资源
专家详解:复杂表达式的执行步骤

ASP.NET 中的 c#中的interface abstract与virtual


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 47 ::
收藏到网摘: n/a


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方法都要求实现