访问级别:
public
private
internal 成员只能由定义它的项目(程序集)内部的代码访问
protected 成员只能由类或派生类中的代码访问
protected internal 只能由项目(程序集)中派生类的代码来访问
定义字段:
readonly: 表示这个字段只能在执行构造函数的过程中赋值,或由初始化赋值语句赋值
static:静态字段
定义方法:
static
virtual 方法可重写
abstract 方法必须在非抽象的派生类中重写(只用于抽象类中)
override 方法重写了一个基类方法(如果方法被重写,就必须用该关键字)
extern 方法定义放在其他地方
override sealed 方法不能由派生类重写
定义属性:
private int myInt;
public int MyIntProp
{
get{return myInt;}
set{myInt=value;}
}
属性可以使用virtual,override,abstract 关键字,但这几个关键字不能用在字段中。
自动属性
public int MyIntProp
{
get;
set;
}
C#编译器会添加未输入的内容,编译哭会声明一个用于存储属性的私有字段,并在属性的get和set块中使用该
字段。
我们以通常的方式定义属性的可访问性,类型和名称,但没有给get和set块提供执行代码。这些块执行代码(
和底层的字段)都由编译器提供。
使用自动属性时,只能通过 属性访问数据。
自动属性唯一限制是它们必须包含get和set访问器,不能用这种方式定义只读或只写的属性
隐藏基类方法:new
重写基本类方法:override
例如:
重写
1 public class MyBaseClass
2 {
3 public virtual void DoSonething();
4 {
5 Console.WriteLine("Base imp");
6 }
7 }
8
9 public class MyDerivedClass:MyBaseClass
10 {
11 public override void DoSomething()
12 {
13 Console.WriteLine("Derived imp");
14 }
15 }
16
17 MyDerivedClass myObj = new MyDerivedClass();
18 MyBaseClass myBaseObj;
19 myBaseObj = myObj;
20 myBaseObj.DoSomething();
21 结果: Derived imp
22
23
隐藏
1 public class MyBaseClass
2 {
3 public virtual void DoSonething();
4 {
5 Console.WriteLine("Base imp");
6 }
7 }
8
9 public class MyDerivedClass:MyBaseClass
10 {
11 new public void DoSomething()
12 {
13 Console.WriteLine("Derived imp");
14 }
15 }
16
17 MyDerivedClass myObj = new MyDerivedClass();
18 MyBaseClass myBaseObj;
19 myBaseObj = myObj;
20 myBaseObj.DoSomething();
21 结果: Base imp
22
23
无论是重写还是隐藏成员,都可以在派生类的内部访问基类成员。使用base关键字
public class MyBaseClass
{
public virtual void DoSonething();
{
Console.WriteLine("Base imp");
}
}
public class MyDerivedClass:MyBaseClass
{
base.DoSomthing(); //这里调用的是基类的方法
}
接口:
注意:
1.不允许使用访问修饰符(public ,private ,protected,internal),所有的接口成员都是公共的。
2.接口成员不能包含代码体
3.接口不能定义字段成员
4.接口成员不能用关键字static ,virtual,abstract,sealed来定义
5.类型定义成员是禁止的
6.如果隐藏了基接口成员,可以用关键字new来定义它们
在类中实现接口:
实现接口的类必须包含该接口所有成员的执行代码,且必须匹配指定的签名(包括匹配指定的get和set块),
并且必须是公共的
1 public interface IMyInterface
2 {
3 void DoSomething();
4 void DoSomethingElse();
5 }
6 public class MyClass:IMyInterface
7 {
8 public void DoSomething()
9 {
10 }
11 public void DoSomethingElse()
12 {
13 }
14 }
可以使用关键字virtual或abstract 来执行接口成员,便不能使用static 或const。
继承一个实现给定接口的基类,就意味着派生类隐式地支持这个接口。
部分类partial
使用部分类定义,使类的定义放到多个文件中,例如,可以把字段,属性和构造函数入在一个文件中,而把方
法放在另一个文件中,为此,只需在每个包含部分类定义的文件中对类使用partial关键字就可
public partial class MyClass
{
}