对访问修饰关键字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 ...
随机推荐
- Q:解决每天第一次打开MSCRM系统展示慢的问题
问题:第天第一次打开系统时,需要加载很长时间,基本为1分多钟,而第二次打开只需5秒. 解决方案:利用IIS中的Session. 一.打开IIS,选择打开服务器功能中“Session State”. 二 ...
- 内置对象Clob对从数据库表中取的字符大对象CLOB类型的列值进行读取操作
package readclobDemo.bao; import java.io.IOException; import java.io.Reader; import java.sql.Clob; i ...
- 【读书笔记】iOS-Xcode-查找特殊字符的方法
如图所示,为搜索图框,然后,点击放大镜图标------->Insert Pattern---->即可看到特殊字符----->选择特殊字符进行插入. 参考资料:<iOS开发进阶& ...
- 【原/转】opencv的级联分类器训练与分类全程记录
众所周知,opencv下有自带的供人脸识别以及行人检测的分类器,也就是说已经有现成的xml文件供你用.如果我们不做人脸识别或者行人检测,而是想做点其他的目标检测该怎么做呢?答案自然是自己训练一个特定的 ...
- unity下载文件二(http同步下载)
说到下载,其实C#里的网络模块,真的是被各种封装,最终就看你对这个语言中库的熟悉程度了. 抛开C#中IO效率的弊病不说,真的很容易,记住,太过于注重效率或者追求极致,你将会死的很惨,有时候折中才是最好 ...
- 将tomcat源码导入eclipse
前言: 写完了socket小应用的原始版本,中间还有好多预想的功能没有实现,在写的过程中也发现了很多问题.因为前面有粗略的看过tomcat实现原理解析,知道tomcat其实也是纯java写的web服务 ...
- const,static,extern简介(重要)
一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 编译时刻:宏是预编译(编译之前处理),const是编译 ...
- Spring-2-J Goblin Wars(SPOJ AMR11J)解题报告及测试数据
Goblin Wars Time Limit:432MS Memory Limit:0KB 64bit IO Format:%lld & %llu Description Th ...
- 使用Sqoop,最终导入到hive中的数据和原数据库中数据不一致解决办法
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL , ...
- 使用Number.parseFloat引发的悲剧
起因: 前几天,项目中有人用了Number.parseFloat(xxx)方法.在Chrome和FF中是可以使用的.然而在IE中却报错,提示不存在这个function. Solution: 经查Jav ...