C#字段、接口、抽象解释
2008-06-23 11:49
134 查看
修饰字段
字段,成员变量,它表示存储位置,是C#中类不可缺少的一部分.修饰字段C#提供5种:
internal :扩展了C++原来的friend修饰符.在有必要使两个类的某些字段相互可见时,我们将这些类的字段声明为 internal,然后将它们放在一个程序集中编译即可.如果对它们的继承子类也可见的话,声明为protected internal实际这也是程序集本来的意图,即将逻辑相关的的类组合封装在一起.
readonly只读字段:只读不能进行写操作,const关键字也不能被修改
1.const ,readonly的值一旦被初始化都不可以在改写
2.const只能在声明时初始化 ,readonly即可以在声明时初始化,也可以在构造器中初始化.
3.const隐含static,不可以再写static const;readonly不默认static,如需要可以写static readonly
4.const是编译静态解析的常量,因此起表达式必须在编译时就可以求值,readonly是运行期动态解析的常量
5.const可用来修饰类中的成员,也可以修饰函数体内的局部变量;readonly只可以用于修饰类中的成员
static 静态方法
1.静态方法是一种特殊的成员方法,它不属于类的某一个具体的实例,属于类本身。class MyClass { public static int add(int x,int y) { ........//代码 } } using syestem; class class1 { [STAThread] static void Main() { int i=MyClass.add(3,5);//调用静态方法 } }
2.static:静态字段属于类,为类的所有对象所共用.非静态字段属于某个具体的对象,为特定的对象专有.
非静态成员在类的每个实例中都占有一个存储或者说是一个副本,而静态方法为类所共享的它无法判断当前 的非静态成员属于那一个实例。
所以在静态方法不能使用非静态成员
。
class A { int x; static int y; static int F() { x=1;//错误,不容许访问非静态成员 y=2;//正确 } }
C#严格归定非静态字段只能通过对象来访问,静态字段只能通过类来访问。
c#中abstract与virtual的区别
1.abstract方法只能在抽象类中声明,虚方法则不是。abstract方法必须在派生类中重写,而virtual则不必
2.abstract方法不能声明方法实体,
abstract public void SD();
虚方法则可以
public virtual void sdf() { Console.WriteLine("A"); }
3.虚方法可以实现多态,而抽象方法不可以。。。
virtual标记方法为虚方法
1.可在派生类中以override覆盖此方法
2.不覆盖也可由对象调用
3.无此标记的方法(也无其他标记),重写时需用new隐藏原方法
abstract 与virtual : 方法重写时都使用 override 关键
using System; using System.Collections.Generic; using System.Linq; using System.Text; public class Test { public static void Main(String[] args) { A a=new B(); Console.Write(a.getVal()); // 输出:A 虽然实例是B,但是执行的却是A的方法 a=new C(); Console.Write(a.getVal()); // 输出:C 实例是C,而且C重写的A的方法,所以执行C的方法 B b=new B(); Console.Write(b.getVal()); // 输出:B 只有定义和实例都是B,才执行B的方法 } } class A { // 要允许子类重写,方法必须标识为virtual 或 abstract public virtual String getVal(){ return "A"; } } class B : A { // 隐藏父类方法 用new标识,不标识时会出现编译警告,不影响使用 //调用的时候会运行基类的同名方法,而不会调用子类有new关键字的方法 public new String getVal(){ return "B"; } } class C : A { // 重写方法 必须用override标识 public override String getVal(){ return "C"; } }
相关文章推荐
- c#基础精华01(强调代码规范,虚方法,抽象方法,接口)
- C#接口详细解释和用法(通俗易懂)
- C# 接口的终极解释
- C# 反射对象的字段属性和实现的接口
- C#中虚函数,抽象,接口的简单说明
- 接口和抽象的解释!(转载自http://blog.csdn.net/fenglibing/article/details/2745123)
- C#接口与抽象
- C# 接口可以有字段field吗?
- C# 类的多态、结构、接口、抽象、虚函数总结
- 浅谈C# 多态的魅力(虚方法,抽象,接口实现)
- .Net学习笔记----2015-07-22(C#基础复习09,虚方法、抽象方法、接口复习)
- asp.net 2.0教程 c#中的接口、抽象、委托
- (转)C#接口与抽象的区别
- 详解C#接口以及实现/C# 接口中不能定义字段
- asp.net 2.0教程 c#中的接口、抽象、委托
- 浅谈C# 多态的魅力(虚方法,抽象,接口实现)
- 浅谈C# 多态的魅力(虚方法,抽象,接口实现)
- C#创建类,方法,接口,字段 的 默认类型
- C# 继承、重写、base、抽象、密封。C# 接口、转换、比较
- 理解C#中接口、继承、抽象、虚拟之间的区别