C# 是面向对象的程序设计语言,每一个函数都属于一个类。 Static:当一个方法被声明为Static时,这个方法是一个静态方法,编译器会在编译时保留这个方法的实现。也就是说,这个方法属于类,但是不属于任何成员,不管这个类的实例是否存在,它们都会存在。就像入口函数Static void Main,因为它是静态函数,所以可以直接被调用。 Virtua:当一个方法被声明为Virtual时,它是一个虚拟方法,直到你使用ClassName variable = new ClassName();声明一个类的实例之前,它都不存在于真实的内存空间中。这个关键字在类的继承中非常常用,用来提供类方法的多态性支持。

overrride:表示重写 这个类是继承于Shape类
public override double Area 这个属性再shape中肯定存在 但是这里我们不想用shape中的 所以要重写
virtual,abstract是告诉其它想继承于他的类 你可以重写我的这个方法或属性,否则不允许。

一个生动的例子 :老爸表示基类(被继承的类) 儿子表示子类(继承的类)

老爸用virtual告诉儿子:"孩子,你要继承我的事业,在这块上面可以自己继续发展你自己的"

儿子用override告诉全世界:"这个我可不是直接拿我爸的,他只是指个路给我,是我自己奋斗出来的" abstract:抽象方法声明使用,是必须被派生类覆写的方法,抽象类就是用来被继承的;可以看成是没有实现体的虚方法;如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法;抽象类不能有实体的。详解----------------------------------------------

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 关键字

接口定义以大写字母I开头。方法只定义其名称,在C#中,方法默认是公有方法;用public修饰方法是不允许的,否则会出现编译错误;接口可以从别的接口继承,如果是继承多个接口,则父接口列表用逗号间隔。
接口可以通过类来实现,当类的基列表同时包含基类和接口时,列表中首先出现的是基类;类必须要实现其抽象方法;
接口使用:见代码(转)

interface使用
interface使用(实例一)

using System;
namespace Dage.Interface
{
//打印机接口
public interface IPrint
{
string returnPrintName();
}
}
//--------------------------------------------
using System;
using Dage.Interface;
namespace Dage.Print
{
//HP牌打印机类
public class HP: IPrint
{
public string returnPrintName()
{
return "这是HP牌打印机";
}
}
}
//--------------------------------------------
using System;
namespace Dage.Print
{
//Eps牌打印机类
public class Eps: IPrint
{
public string returnPrintName()
{
return "这是Eps牌打印机";
}
}
}
//--------------------------------------------
using System;
using Dage.Interface;
namespace Dage
{
//打印类
public class Printer
{
public Printer()
{}
public string PrintName(IPrint iPrint)
{
return iPrint.returnPrintName();
}
}
}
//--------------------------------------------
--WinFrom中调用代码:
private void button1_Click(object sender, System.EventArgs e)
{
Printer p= new Printer();
switch (this.comboBox1.Text)
{
case "HP":
MessageBox.Show(p.PrintName(new HP()));
break;
case "Eps":
MessageBox.Show(p.PrintName(new Eps()));
break;
default:
MessageBox.Show("没有发现这个品牌!");
break;
}
}

C#的static,interface,virtual,abstract,override的区别用法相关推荐

  1. C#中的static,interface,virtual,abstract,override的用法

    C# 是面向对象的程序设计语言,每一个函数都属于一个类. Static:当一个方法被声明为Static时,这个方法是一个静态方法,编译器会在编译时保留这个方法的实现. 也就是说,这个方法属于类,但是不 ...

  2. Java技术——Interface与abstract类的区别

    0. 前言   抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在对多态提供了非常好的支持.他们两者有很大的相似,甚至可以互换,但是也有区别.对于他们的选择反应了你对该问题的 ...

  3. interface与abstract类的区别

    interface与abstract类的区别 abstract class 只能被继承extends,体现的是一种继承关系,而根据继承的特征,有继承关系的子类和父类应该是一种"is-a&qu ...

  4. C#--virtual,abstract,override,new,sealed修饰符学习

    1.参考博客  http://www.cnblogs.com/oneword/archive/2009/07/02/1515279.html http://www.cnblogs.com/mygood ...

  5. 温故而知新:new与override的差异以及virtual方法与abstract方法的区别

    先直接看代码吧: using System;namespace ConsoleApplication1 {class Program{static void Main(string[] args){B ...

  6. Sealed,new,virtual,abstract与override的区别

    1. Sealed: a) 密封类不能被继承. b) 密封方法可以重写基类中的方法,但其本身不能在任何派生类中进一步重写.当应用于方法或者属性时,sealed修饰符必须始终与Override一起使用. ...

  7. C# selecd,new,virtual,abstract与override

    本文大部分内容摘自  <.NET开发专家·亮剑.NET : .NET深入体验与实战精要> 博主只是搬运工,不喜勿喷. 关于虚方法,抽象类这一部分一直不是太清楚,目前的工作中也接触不到这些. ...

  8. abstract、virtual、override 和 new

     abstract.virtual.override 和 new 是在类的继承关系中常用的四个修饰方法的关键字,在此略作总结. 1. 常用的中文名:abstract 抽象方法,virtual 虚方法, ...

  9. C# 虚方法(virtual)覆盖(override) - 隐藏(new) - 重载

    C# 虚方法(virtual)覆盖(override) - 隐藏(new) - 重载 using System; using System.Collections.Generic; using Sys ...

最新文章

  1. Android获取内部和SDCard的存储空间
  2. shell执行mysql命令
  3. python pandas读取excel-python pandas 读取文件 写入文件excel
  4. h5页面的写法_8. 开始构建我们的 index.hbs 页面
  5. numpy-自定义ufunc函数和广播
  6. 【外贸人必看骗术】和中东客户做生意
  7. drupal启动过程
  8. MSP430F5529 DriverLib 库函数学习笔记(九)SPI
  9. python关闭exe程序_Win 10 中使用 Python 碰到的奇怪现象
  10. cron每月1号_微信服务号按粉丝标签分组群发消息怎样实现?
  11. [Python设计模式] 第13章 造小人——建造者模式
  12. win10 家庭版(20H2) 安装sqlserver2000 指南
  13. matlab 读取 Microsoft Excel 电子表格文件不推荐使用 xlsread
  14. si24r1程序_SI24R1多对一通信功能(ACK模式,ACK不带PAYLOAD)程序资料开发
  15. part2:服务器接收企业微信用户消息
  16. 关于URL的转码与解码
  17. java mission control_Java Mission Control之使用
  18. H5的video用法
  19. 沉浸其境,共赴云栖数智硬核美学
  20. NYOJ-1273-宣传墙

热门文章

  1. STL常用的算术和生成算法
  2. 经典C语言程序100例之五
  3. mysql物理备份迁移注意细节_物理拷贝备份mysql到其他机器上恢复
  4. 看代码的软件_软件著作权申请中常见的补正问题及解决方式
  5. linux系统生成的新文件是什么编码的,Linux系统的默认编码设置
  6. Oracle数据库表信息,序列,视图等导出,导入。(数据库备份和恢复)
  7. 第十八天:规划风险管理和识别风险
  8. 文件操作ofstream,open,close,ifstream,fin,按照行来读取数据, fstream,iosin iosout,fio.seekg(),文件写入和文件读写,文件拷贝和文件
  9. Spring整合的quartz任务调度的实现方式
  10. 处理数字_3_计算表的行数