《C#高级编程》第四版
C#中访问修饰符(第4章 继承)
修饰符:应用于类型或成员的关键字,通过它可以指定方法的可见性
1.可见性修饰符
下表修饰符确定了是否允许其它代码访问某一项
修饰符 应用于 说明
public 所有的类型或成员 任何代码均可访问该方法
protected 类型和内嵌类型的所有成员 只有派生的类型能访问该方法
internal 所有的类型或成员 只能在包含它的程序集中访问该方法
private 类型和内嵌类型的所有成员 只能在它所属的类型中访问该方法
protected internal 类型和内嵌类型的所有成员 只能在包含它的程序集和派生类型的代码中访问该方法
对于C#类的限制修饰符的总结:
(1)public可以被任意存取
(2)protected只可以被本类和其继承子类存取
(3)internal 只可以被本组合体(Assembly)内的所有类存取(C#中类的默认访问修饰符)
组合体:是C#语言中类被组合后的逻辑单位和物理单位(编译后的扩展名一般是.dll或.exe)
(4)protected internal C#中唯一的一种组合限制修饰符,只可以被本组合体内的所有的类和这些类的继承子类所存取
(5)private只可以被本类所存取
注意:不能把类型定义为protected、private和protected internal
因为这些修饰符对于包含在命名空间中的类型来说是没有意义的
所以:命名空间或编译单元内的类只有public和internal两种修饰
但在嵌套类中,可以用这些修饰符定义,因为此情况下类型也具有成员的状态
如:
public class OuterClass
{
protected class InnerClass
{
.....
}
}
在嵌套类中,内部类总是可以访问外部类的所有成员
2.其他修饰符
修饰符 应用于 说明
new 函数成员 派生类方法隐藏基类方法
static 类、所有成员 成员不在类的具体实例上执行(static类中只能包含static成员)
virtual 函数成员 成员可以由派生类重写
abstract 类、函数成员 抽象,定义成员签名,没有提供实现代码
override 函数成员 成员重写基类的虚拟或抽象成员
sealed 类、函数成员 对于类则表示其它类不能从该类继承
成员重写了继承的虚拟成员,但继承该类的任何类都不能再重写该成员
sealed override 必须一起使用
extern修饰符:用于声明在外部实现的方法(成员在外部用另一种语言实现)
常见用法是在使用Interop服务调入非托管代码时与DllImport属性一起使用;
在这种情况下,该方法还必须声明为static
如:
使用c#程序修改ftp用户密码的操作的代码中:
[DllImport("WinInet.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr InternetConnect(
IntPtr hInternet,
[MarshalAs(UnmanagedType.LPTStr)] string serverName,
InternetPort serverPort,
[MarshalAs(UnmanagedType.LPTStr)] string username,
[MarshalAs(UnmanagedType.LPTStr)] string password,
InternetService service,
int flags,
IntPtr context
);