公有和静态
当类声明的时候,自身的字段,方法无论是私有的,还是公开的,又或者是静态的,类自身都可以直接用(无需new):
class Test
{
private int a;
public string str;
private void AA(){ }
public void CC() { }
static void TT() { }
public static void YY() { }
void BB()
{
a = 10;
str = "test";
AA();//私有方法
CC();//公有方法
TT();//私有静态方法
YY();//公有静态方法
}
}
也就是说权限仅仅是对于其他类,这个其他类即包括没有任何关系的类,也包括继承子类。
当有子类继承于Test的时候,子类能访问的就是父类的公有字段和公有方法(无需new):
class Child:Test
{
void DD()
{
str = "child";//可访问公有
CC();
// TT(); //不能访问私有静态
YY();//直接访问公有静态
}
}
总结起来: ①自身或者有继承关系,都不需new,也不需要带类名,直接能使用字段或者方法,自身无视任何修饰符,可以说没有限制。
②继承关系只能访问公有修饰符,但它忽视静态,不需new,也不需要带类名。它限制父类的私有成员无法访问。
③完全无关的类要访问,只能访问公有,还需要区分是否静态来决定要不要new,要不要带类名。限制最多。
类声明中创建类自身
另外类声明的时候,也可以创建类自身的对象:
哪怕是new出的自己,也要符合对象的权限,此时对象就只能访问非静态的成员(无论公私有),无法访问TT和YY 方法。
语法上是可行的,只不过实际中没什么用处,还容易陷入思维怪圈,无限迭代,自己把自己弄糊涂。