C#难点逐个击破(5):类的访问类型
- 作者: 夏娃夏娃
- 来源: 51数据库
- 2021-10-19
讲这四类之间的区别时有必要讲解一个概念:程序集。程序集(assembly),可以简单理解为编译之后生成的.dll或.exe文件,相对于namespace是类库的逻辑组织形式,它可以称为程序类库的物理组织形式,msdn上描述“程序集包含描述它们自己的内部版本号和它们包含的所有数据和对象类型的详细信息的元数据”。一般情况是一个程序集可以包含一个或者多个命名空间。
public:对其他任何类的任何方法都是可见的;
private:本类中定义的成员只有本类的方法才能访问;
protected:本类中的成员只有本类的方法及继承本类的类的方法才能访问;
internal:本类中的成员只有本类所在的程序集中的任何类的方法访问;
protected internal:为protected与internal的并集。
因此从访问级别由高到低应当是public>protected internal>internal>protected>private
类的默认修饰符为internal ,类中的成员变量默认修饰符为private,namespace可认为修饰符为public。另一点在msdn上也提到继承类的访问级别不能大于被继承类的访问级别,如internal的类不能继承private的类。
using system;
/******************************
* chapter:c#难点逐个击破(五)
* author:王洪剑
* date:2010-1-15
* blog:http://www.51obj.cn/
* email:walkingp@126.com
* description:访问修改符
* ***************************/
namespace testmain
{
public class a
{
public void alert()
{
}
}
internal class b:a
{
internal new void alert()
{
console.writeline("you");
}
}
class program
{
static void main()
{
b b=new b();
b.alert();
}
}
}
public:对其他任何类的任何方法都是可见的;
private:本类中定义的成员只有本类的方法才能访问;
protected:本类中的成员只有本类的方法及继承本类的类的方法才能访问;
internal:本类中的成员只有本类所在的程序集中的任何类的方法访问;
protected internal:为protected与internal的并集。
因此从访问级别由高到低应当是public>protected internal>internal>protected>private
类的默认修饰符为internal ,类中的成员变量默认修饰符为private,namespace可认为修饰符为public。另一点在msdn上也提到继承类的访问级别不能大于被继承类的访问级别,如internal的类不能继承private的类。
复制代码 代码如下:
using system;
/******************************
* chapter:c#难点逐个击破(五)
* author:王洪剑
* date:2010-1-15
* blog:http://www.51obj.cn/
* email:walkingp@126.com
* description:访问修改符
* ***************************/
namespace testmain
{
public class a
{
public void alert()
{
}
}
internal class b:a
{
internal new void alert()
{
console.writeline("you");
}
}
class program
{
static void main()
{
b b=new b();
b.alert();
}
}
}
推荐阅读
- C#通过fleck实现wss协议的WebSocket多人Web实时聊天(附源码)
- 团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
- 使用 MSBuild.exe 在发布模式下构建 C# 解决方案
- 当我发布 Web 应用程序时,AfterPublish 脚本不运行
- 构建时 T4 转换的产品仅在下一个构建中使用
- ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
- 新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
- 如何将条件编译符号(DefineConstants)传递给 msbuild
- MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
- NuGet 包还原找不到包,没有源
热点文章
团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
0
使用 MSBuild.exe 在发布模式下构建 C# 解决方案
0
当我发布 Web 应用程序时,AfterPublish 脚本不运行
0
构建时 T4 转换的产品仅在下一个构建中使用
0
ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
0
新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
0
如何将条件编译符号(DefineConstants)传递给 msbuild
0
MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
0
NuGet 包还原找不到包,没有源
0
使用 C# 6.0 功能运行 TFS 构建
0