对访问修饰关键字public, protected, internal and private的说明
对访问修饰关键字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
对访问修饰关键字public, protected, internal and private的说明的更多相关文章
- php类点滴---访问修饰符public protected private
public可以被继承,可以外部访问(也就是实例化对象可以直接访问) protected受保护的,可以被子类继承,无法外部访问 private继承,外部访问都别想 <?phpclass coac ...
- 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)
访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...
- JAVA类型修饰符(public,protected,private,friendly)
JAVA类型修饰符(public,protected,private,friendly) public的类.类属变量及方法.包内及包外的不论什么类均能够訪问:protected的类.类属变量及方法,包 ...
- Java中访问修饰符public、private、protecte、default
Java中访问修饰符public.private.protecte.default的意义讲解:public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”.被其修饰的类.属性以及方法不 仅 ...
- 详细的解说public,protected,Default和private的权限问题
详细的解说public,protected,Default和private的权限问题 让人更好的了解public,protected,Default和private他们之间的权限问题,我会做一个直观的 ...
- 访问修饰符(public,private,protected,internal,sealed,abstract)
为了控件C#中的对象的访问权限,定义对象时可以在前面添加修饰符. 修饰符有五种:private(私有的),protected(受保护的),internal(程序集内部的),public(公开的),以及 ...
- C#访问修饰符(public,private,protected,internal,sealed,abstract)
为了控件C#中的对象的访问权限,定义对象时可以在前面添加修饰符. 修饰符有五种:private(私有的),protected(受保护的),internal(程序集内部的),public(公开的),以及 ...
- Java访问权限修饰符public protected friendly private用法总结(转载好文Mark)
首先声明:Java中,friendly这个修饰符并没有显式的声明,在成员变量和方法前什么修饰符也不用,默认的就是friendly.为了条理清晰,分三种不同情况来总结. 一 访问权限修饰符修饰成员变量和 ...
- java中访问修饰符public,private,protected,friendly的作用域
在修饰的元素上没有写任何的访问修饰符,则表示friendly. 作用域 当前类 同一包中 子孙类 其他包中 public √ √ √ √ protected √ √ √ × private √ x x ...
随机推荐
- Java集合 Json集合之间的转换
1. Java集合转换成Json集合 关键类:JSONArray jsonArray = JSONArray.fromObject(Object obj); 使用说明:将Java集合对象直接传进JSO ...
- css实现垂直居中的方法
1,设置其line-height值,使之与其高度相同 2,设置table结构,用vertical-align:middle; 3,应用定位,父级别:position:relative:子级:posit ...
- RHEL7文件权限
本文介绍Linux下的文件权限 操作系统为RHEL7.2_X86_64 可以从以下三种访问方式限制访问权限: 1 只允许用户自己访问 2 允许一个预先指定的用户组中的用户访问 3 允许系统中的任何用户 ...
- SharePoint 2013 内容部署功能简介
在之前的项目中,当客户有新的需求的时候,我们通常在测试环境上开发或者实施,然后手动在生产环境再弄一次.当发现内容部署这个东西,才知道这样是多么不合理的.我们可以创建两个网站集,一个用来修改,然后通过计 ...
- 复杂领域的Cynefin模型和Stacey模型
最近好奇“复杂系统”,收集了点资料,本文关于Cynefin模型和Stacey模型.图文转自互联网后稍做修改. Cynefin模型提供一个从因果关系复杂情度来分析当前情况而作决定的框架,提出有五个领域: ...
- IOS单例
单例就是只有一个实例. 两种常见的创建方法: 1. : static A *a = nil; + (A *)shareInstance { if (!a) a = [[self alloc] init ...
- iOS设计模式之原型模式
原型模式 基本理解 原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节 ...
- 【原】自定义UIPageControl的圆点
在下面的两种情况下会导致圆点贴图刷新: 1.用户调用setCurrentPage:(NSInteger)currentPage时 所以重载这个函数便可拦截 2.点击圆点矩形区域时 这说明,我们 ...
- IOS-UITextField-全解
IOS-UITextField-全解 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame: ...
- 怎么向Xcode6 IOS8之后向项目中添加预编译文件
苹果的XCode在6版本之后新建项目时取消了自动创建预编译头文件pch,该文件里存放的工程中一些不常被修改的代码,比如常用的框架头文件,这样做的目的提高编译器编译速度.我们可以往里面加入一些项目中都要 ...