访问修饰符的个人理解-private与protected
一:private
private --只有在声明它的类或结构中访问.
例:
public class A
{
private string name="xu";
int age="23"; //默认为private
}
这时就不能在A的外部直接读取name和age的值,只有通过A类中的方法或属性完成。完整示例:
public class A
{
private string name="xu";
int age="23"; //默认为private
public string GetName() //这时的属性或方法就不能再声明为private 或protected了,这样会导致在外部同样不能访问。
{
return name;
}
public int Age
{
get { retunr age;}
}
}
public class B
{
public B()
{
A a1=new A();
//string x=a1.name; 这样就不能访问A的name了
string x=a1.GetName() ; //通过方法来访问。
//int age=a1.age; can not do this;
int age=a1.Age; //通过属性来访问
}
}
二 protected
protected 关键字是一个成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访问。
个人理解为:受保护成员只能在声明它的类中访问(如同private一样)或者通过它的派生类来访问。
如下例:
using System;
class A
{
protected int x = 123;
public int X{get return x;}
}
class B : A
{
static void Main()
{
A a = new A();
B b = new B();
// Error CS1540, because x can only be accessed by
// classes derived from A.
// a.x = 10;
// a.X;----这样就可以读取
// OK, because this class derives from A.
b.x = 10;
}
}
分析:
一:当使用a.x=10时,由于A是基类,因此其下的private x不能外部访问,此时用a.x=10就会报错。
二:为什么用b.x=10就可以呢,这也是外部呀? ^_^:因此,此时,类B是类A的派生类,protected 修饰的如果在派生类中就可以访问。
总结:protected类型的,在外部而非派生类中访问时除非通过方法或属性,否则不可以访问。而在派生类中就可以访问。
private类型的,除非通过方法或属性,否则不可以在外部访问。
属于 默认的成员可访问性 该成员允许的声明的可访问性
enum public 无
class private < public protected internal private protected internal >
interface public 无
struct private <public internal private >
心静似高山流水不动,心清若巫峰雾气不沾。
</h3>