当前位置:  编程技术>.net/c#/asp.net

C# 的关键字详细介绍

    来源: 互联网  发布时间:2014-10-15

    本文导语:  用于修饰类,方法,属性和字段的关键字:  首先从最简单的private,protected,internal,public 解释。 public 和internal 修饰类。 public,protected,private 修饰方法。 修饰类的时候: public 代表公开,也就是所有程序集都可以访问这个类。 int...

用于修饰类,方法,属性和字段的关键字:
 
首先从最简单的private,protected,internal,public 解释。
public 和internal 修饰类。
public,protected,private 修饰方法。
修饰类的时候:
public 代表公开,也就是所有程序集都可以访问这个类。
internal 代表内部的,也就是只有在同一程序集中才能访问这个类,一般而言同一程序集就是同一个dll。
修饰方法的时候:
public 代表公开,也就是所有的类都可以访问这个方法。
protected 代表受保护的,也就是只有我的子类才能访问这个方法。
private 代表私有的,也就是只有我才能访问这个方法。
接着我们来讨论下const,readonly 的区别:
首先两者都是常量,不同的是const 是编译时常量,readonly是运行时常量。
编译时常量:在编译的时候,值就已经是常量了,任何使用该变量的地方都会被替换成常量值。
运行时常量:在运行的时候,值不能够被修改。
代码如下:

public class Test
{
public const string constStr = "this is a test";
public readonly string readonlyStr = "this can't be modified in runtime time";
public void Method1()
{
string s1 = constStr; // 在编译的时候,这句话就会被替换成 string s1 = "this is a test";
readonlyStr = "error";
//尝试修改readonlyStr,无法通过编译,
//抛出错误:readonly 字段只有在构造函数和初始化的时候才能修改。
}
}

 
OK,现在我们讨论下abstract, virtual , new , override 关键字:
首先abstract 代表的是抽象,abstract 可以修饰类和方法。
修饰类的时候:
这个时候叫做抽象类,抽象类有下列性质:
抽象类不能实例化。
抽象类可以包含抽象方法和抽象访问器,访问器实际上也是方法。
不能用 sealed修饰符修饰抽象类,因为这两个修饰符的含义是相反的。 采用 sealed 修饰符的类无法继承,而 abstract 修饰符要求对类进行继承。
从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实际实现。
修饰方法的时候:
这个时候叫做抽象方法,性质如下:
抽象方法是隐式的虚方法(用virtual 修饰方法的叫做虚方法)。
只允许在抽象类中使用抽象方法声明,只要使用抽象方法,那么这个就是抽象类。
因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。 例如:
public abstract void MyMethod();
实现由一个重写方法override 提供,此重写方法是非抽象类的一个成员。
在抽象方法声明中使用 static 或 virtual 修饰符是错误的,因为抽象方法需要被重写,所以不能用static修饰,因为抽象方法是隐式的虚方法,所以不能用virtual修饰。
除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样,属性本质上是方法。
在静态属性上使用 abstract 修饰符是错误的。
在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。
virtual 关键字代表虚拟的,虚的,修饰的是方法。
修饰方法的时候:
这个时候叫做虚方法,虚方法代表这个方法是虚的,这个方法可能没有实现,这个方法可以被重写。
关键的一句话是:这个方法可以被重写。
这代表,如果这个方法想要被重写,被override,那么它就必须是一个虚方法,因为abstract修饰的方法是隐式的虚方法,所以abstract和virtual 修饰的方法可以被override。
override 关键字代表重写,修饰的是方法。
override 方法提供从基类继承的成员的新实现。 由 override 声明重写的方法称为重写基方法。 重写的基方法必须与 override 方法具有相同的签名。
修饰方法的时候:
1:不能重写非虚方法或静态方法。 重写的基方法必须是 virtual、abstract 或 override 的。
override 方法和 virtual 方法必须具有相同的访问级别修饰符。
2:您不能使用 new、static 或 virtual 修饰符来修改 override 方法。
3:重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且被重写的属性必须
是 virtual、abstract 或 override 的。
new 关键字代表隐藏,修饰的是方法。
new 和override 的区别是,new 是隐藏父类方法,这就好比告诉别人,这个方法和父类的方法是两个不同的方法,只是他们的签名刚好相同罢了,override 则不同,override 告诉别人,以后用我的instance调用的就是我的方法,用父类的instance调用的就是父类的方法。
总结下:abstract,virtual,override,new 的关系。
override 的方法必须是abstract ,virtual, override 的。
abstract 的方法是隐式的virtual 方法。
virtual 的方法代表这个方法可以被重写,当然你也可以不重写它。
abstract的方法代表这个方法是必须被重写的方法。
new 的方法代表这个方法和父类的没关系,是一个新的“new” 方法,只是刚好签名相同罢了。
最后一道题:
代码如下:

class A
{
public virtual void F()
{
Console.WriteLine("A.F");
}
}
class B : A
{
public override void F()
{
Console.WriteLine("B.F");
}
}
class C : B
{
new public virtual void F() { Console.WriteLine("C.F"); }
}
class D : C
{
public override void F() { Console.WriteLine("D.F"); }
}
class Program2
{
static void Main()
{
D d = new D();
A a = d; B b = d;
C c = d; a.F(); b.F();
c.F();
d.F();
}
}

    
 
 

您可能感兴趣的文章:

  • C#中fixed关键字的作用总结
  • docker中文入门学习手册 iis7站长之家
  • C#使用yield关键字让自定义集合实现foreach遍历的方法
  • c#中var关键字用法浅谈
  • c#中this关键字与base关键字使用方法
  • 用C#的params关键字实现方法形参个数可变示例
  • 自动为文章关键字添加链接的C#代码
  • c# Base关键字的使用
  • C#中的yield关键字的使用方法介绍
  • 描述C#多线程中lock关键字的使用分析
  • C# 屏蔽关键字的实现方法
  • .net(c#)中的new关键字详细介绍
  • C# Dynamic关键字之:调用属性、方法、字段的实现方法
  • C#自动给文章关键字加链接实现代码
  • C#中Monitor对象与Lock关键字的区别分析
  • 深入理解C# abstract和virtual关键字
  • c#多线程中Lock()关键字的用法小结
  • C# Dynamic关键字之:解析dynamic就是Object
  • C# 参考之访问关键字:base、this
  • 深入探讨C#中的const、readonly关键字
  • linux下grep命令实现查找多个关键字(与关系和或关系)
  • 在JBuilder中,为什么编写的代码中,当代码出现关键字时,后面的部分代码就移位了,当在有关键字的那些代码行进行选择时,也会出现鼠标位
  • c++模板(template)中的class和typename关键字异同比较
  • java 中的static关键字和final关键字的不同之处
  • this关键字如何使用?
  • transient 关键字有什么用途
  • 在下面这段代码中,如果对init方法只加synchronized关键字,则不能达到互斥的目的,还要再加上static关键字才能互斥,为什么?
  • 如何在压缩文件下搜索关键字。求命令
  • Linux字符模式下,有没有支持源码关键字的软件?
  • const是关键字?怎么用?
  • 到底true和false 是不是关键字?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • sed找到关键字所在行并将其前面的第一个字符删除的命令
  • vim 单个关键字缩进规则更改
  • 怎样在vi 中,让关键字以特定的颜色突出出来?
  • gvim怎么增加关键字?
  • 请教finally关键字的用法
  • 如何在C语言的宏中使用类型关键字
  • destoon实现调用热门关键字的方法
  • MySQL单表多关键字模糊查询的实现方法
  • java之super关键字用法实例解析
  • 我下载的sdk1.4文档如何查找一些关键字呀,一搜索就会上线
  • 寻找一种较为方便的java代码文本编辑器(比如带有语法及关键字变色功能)?
  • 查找oracle数据库表中是否存在系统关键字的方法
  • 如何根据关键字查找某个目录下的所有文件
  • c++关键字mutable深入解析
  • Oracle AS关键字 提示错误
  • instanceof关键字的作用是什么?
  • strictfp是什么关键字?
  • 小弟一直弄不明白this这个关键字。
  • 关键字的问题!
  • 怎么使用assert 这个关键字?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3