对访问修饰关键字public, protected, internal and private的说明
2012-04-18 16:07
323 查看
对访问修饰关键字public, protected, internal and private的说明
1.
msdn: Internal types or members are accessible only within files in the same assembly.
只要在同一个assembly中就能访问,而不是命名空间。
如下面的例子,在同一个assembly ClassLibrary2.dll中:
namespace ClassLibrary2
{
public class Class1
{
protected string TestString1 { get; set; }
internal string TestString2 { get; set; }
protected internal string TestString3 { get; set; }
}
}
// 在子命名空间中访问
namespace ClassLibrary2.SubNamespace
{
public class Class2
{
public Class2()
{
Class1 c1 = new Class1();
//c1.TestString1 = "1"; // 'ClassLibrary2.Class1.TestString1' is inaccessible due to its protection level
c1.TestString2 = "2";
c1.TestString3 = "3";
}
}
}
// 在另一个命名空间中访问
namespace AnotherNamespace
{
public class Class3
{
public Class3()
{
ClassLibrary2.Class1 c1 = new ClassLibrary2.Class1();
//c1.TestString1 = "1"; // 'ClassLibrary2.Class1.TestString1' is inaccessible due to its protection level
c1.TestString2 = "2";
c1.TestString3 = "3";
}
}
}
2.
protected表示只能在定义它的类的内部或者它的子类内部访问。
被protected internal两个关键字同时修饰的表示能被子类访问(子类可以在另一个assembly中)或者在同一个assembly中访问。
注意它们上并集,不是交集。
例如有另外一个assembly, ClassLibrary3.dll:
namespace ClassLibrary3
{
public class A : ClassLibrary2.Class1
{
public A()
{
this.TestString1 = "1";
//this.TestString2 = "2"; // cannot see it.
this.TestString3 = "3";
}
}
}
3.
Top-level types, which are not nested in other types, can only have internal or public accessibility. The default accessibility for these
types is internal.
如果尝试用private,protected, or protected internal修饰一个Top-level class,例如:
private class A
{
}
会报一个错:Error,Elements defined in a namespace cannot be explicitly declared as private, protected, or protected internal
但是可以修饰nested class, 如下,是不报错的。B缺省为internal。
class B
{
private class B1 { }
protected class B2 { }
protected internal class B3 { }
}
nested type的缺省修饰如下:
Members of Default member accessibility Allowed declared accessibility of the member
enum public None
class private public, protected, internal, protected internal, pirvate
interface public None
1.
msdn: Internal types or members are accessible only within files in the same assembly.
只要在同一个assembly中就能访问,而不是命名空间。
如下面的例子,在同一个assembly ClassLibrary2.dll中:
namespace ClassLibrary2
{
public class Class1
{
protected string TestString1 { get; set; }
internal string TestString2 { get; set; }
protected internal string TestString3 { get; set; }
}
}
// 在子命名空间中访问
namespace ClassLibrary2.SubNamespace
{
public class Class2
{
public Class2()
{
Class1 c1 = new Class1();
//c1.TestString1 = "1"; // 'ClassLibrary2.Class1.TestString1' is inaccessible due to its protection level
c1.TestString2 = "2";
c1.TestString3 = "3";
}
}
}
// 在另一个命名空间中访问
namespace AnotherNamespace
{
public class Class3
{
public Class3()
{
ClassLibrary2.Class1 c1 = new ClassLibrary2.Class1();
//c1.TestString1 = "1"; // 'ClassLibrary2.Class1.TestString1' is inaccessible due to its protection level
c1.TestString2 = "2";
c1.TestString3 = "3";
}
}
}
2.
protected表示只能在定义它的类的内部或者它的子类内部访问。
被protected internal两个关键字同时修饰的表示能被子类访问(子类可以在另一个assembly中)或者在同一个assembly中访问。
注意它们上并集,不是交集。
例如有另外一个assembly, ClassLibrary3.dll:
namespace ClassLibrary3
{
public class A : ClassLibrary2.Class1
{
public A()
{
this.TestString1 = "1";
//this.TestString2 = "2"; // cannot see it.
this.TestString3 = "3";
}
}
}
3.
Top-level types, which are not nested in other types, can only have internal or public accessibility. The default accessibility for these
types is internal.
如果尝试用private,protected, or protected internal修饰一个Top-level class,例如:
private class A
{
}
会报一个错:Error,Elements defined in a namespace cannot be explicitly declared as private, protected, or protected internal
但是可以修饰nested class, 如下,是不报错的。B缺省为internal。
class B
{
private class B1 { }
protected class B2 { }
protected internal class B3 { }
}
nested type的缺省修饰如下:
Members of Default member accessibility Allowed declared accessibility of the member
enum public None
class private public, protected, internal, protected internal, pirvate
interface public None
相关文章推荐
- 对访问修饰关键字public, protected, internal and private的说明
- C++的访问权限控制关键字:private / public / protected
- 简述public private protected internal修饰符的访问权限
- PHP5的72变:理解类中public,private,protected关键字-访问控制--第1变
- OC-010.OC类中的修饰可见性的关键字@private、@protected、@public
- 关于C#中的几个访问修饰符的说明private,public,protected...
- 浅析php面向对象public private protected 访问修饰符
- c++中访问说明符(public,private,protected)的定义
- IOS中的四种变量修饰关键字 @private @protected @public @package
- public、private、protected、default 访问权限的区别以及其它的Java修饰词
- java public protected 默认 还有private修饰后的可见性,访问权限
- Java访问权限修饰词private、public、protected、default、default(缺省)
- java类中修饰符public,protected等访问权限总结
- C++多态之继承5-继承和访问说明符(public ,protected, private)
- Java学习循序渐进之private,protected,public,默认修饰的访问权限
- C++中public,protected,private访问
- Kotlin编程之可见性修饰词(private,protected,internal,public)
- 【转载】C++中public,protected,private访问
- Java中private , public , protected 几个关键字
- Java【public、private、protected区别】-访问权限