一个 访问修饰符 定义了一个类成员的范围和可见性。C# 支持的访问修饰符如下所示:

  • public:所有对象都可以访问;
  • private:对象本身在对象内部可以访问;
  • protected:只有该类对象及其子类对象可以访问
  • internal:同一个程序集的对象可以访问;使用internal的类只能在同一个项目中使用,不能在别的项目中使用
  • protected internal:访问限于当前程序集或派生自包含类的类型。

Public 访问修饰符

Public 访问修饰符允许一个类将其成员变量和成员函数暴露给其他的函数和对象。任何公有成员可以被外部的类访问。

下面的实例说明了这点:

using System;

namespace RectangleApplication
{
class Rectangle
{
//成员变量
public double length;
public double width; public double GetArea()
{
return length * width;
}
public void Display()
{
Console.WriteLine("长度: {0}", length);
Console.WriteLine("宽度: {0}", width);
Console.WriteLine("面积: {0}", GetArea());
}
}// Rectangle 结束 class ExecuteRectangle
{
static void Main(string[] args)
{
Rectangle r = new Rectangle();
r.length = 4.5;
r.width = 3.5;
r.Display();
Console.ReadLine();
}
}
}

当上面的代码被编译和执行时,它会产生下列结果:

长度: 4.5
宽度: 3.5
面积: 15.75

在上面的实例中,成员变量 length 和 width 被声明为 public,所以它们可以被函数 Main() 使用 Rectangle 类的实例 r 访问。

成员函数 Display() 和 GetArea() 可以直接访问这些变量。

成员函数 Display() 也被声明为 public,所以它也能被 Main() 使用 Rectangle 类的实例 r 访问。

Private 访问修饰符

Private 访问修饰符允许一个类将其成员变量和成员函数对其他的函数和对象进行隐藏。只有同一个类中的函数可以访问它的私有成员。即使是类的实例也不能访问它的私有成员。

下面的实例说明了这点:

using System;

namespace RectangleApplication
{
class Rectangle
{
//成员变量
private double length;
private double width; public void Acceptdetails()
{
Console.WriteLine("请输入长度:");
length = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("请输入宽度:");
width = Convert.ToDouble(Console.ReadLine());
}
public double GetArea()
{
return length * width;
}
public void Display()
{
Console.WriteLine("长度: {0}", length);
Console.WriteLine("宽度: {0}", width);
Console.WriteLine("面积: {0}", GetArea());
}
}//end class Rectangle
class ExecuteRectangle
{
static void Main(string[] args)
{
Rectangle r = new Rectangle();
r.Acceptdetails();
r.Display();
Console.ReadLine();
}
}
}

当上面的代码被编译和执行时,它会产生下列结果:

请输入长度:
4.4
请输入宽度:
3.3
长度: 4.4
宽度: 3.3
面积: 14.52

在上面的实例中,成员变量 length 和 width 被声明为 private,所以它们不能被函数 Main() 访问。

成员函数 AcceptDetails() 和 Display() 可以访问这些变量。

由于成员函数 AcceptDetails() 和 Display() 被声明为 public,所以它们可以被 Main() 使用 Rectangle 类的实例 r 访问。

Protected 访问修饰符

Protected 访问修饰符允许子类访问它的基类的成员变量和成员函数。这样有助于实现继承。

Internal 访问修饰符

Internal 访问说明符允许一个类将其成员变量和成员函数暴露给当前程序中的其他函数和对象。换句话说,带有 internal 访问修饰符的任何成员可以被定义在该成员所定义的应用程序内的任何类或方法访问。

using System;

namespace RectangleApplication
{
class Rectangle
{
//成员变量
internal double length;
internal double width; double GetArea()
{
return length * width;
}
public void Display()
{
Console.WriteLine("长度: {0}", length);
Console.WriteLine("宽度: {0}", width);
Console.WriteLine("面积: {0}", GetArea());
}
}//end class Rectangle
class ExecuteRectangle
{
static void Main(string[] args)
{
Rectangle r = new Rectangle();
r.length = 4.5;
r.width = 3.5;
r.Display();
Console.ReadLine();
}
}
}

当上面的代码被编译和执行时,它会产生下列结果:

长度: 4.5
宽度: 3.5
面积: 15.75 在上面的实例中,请注意成员函数 GetArea() 声明的时候不带有任何访问修饰符。如果没有指定访问修饰符,则使用类成员的默认访问修饰符,即为 private

Protected Internal 访问修饰符


Protected Internal 访问修饰符允许在本类,派生类或者包含该类的程序集中访问。这也被用于实现继承。

直白解释:

  1. 比如说:一个人A为父类,他的儿子B,妻子C,私生子D(注:D不在他家里)

    如果我们给A的事情增加修饰符:

    • public事件,地球人都知道,全公开
    • protected事件,A,B,D知道(A和他的所有儿子知道,妻子C不知道)
    • private事件,只有A知道(隐私?心事?)
    • internal事件,A,B,C知道(A家里人都知道,私生子D不知道)
    • protected internal事件,A,B,C,D都知道,其它人不知道
     

    • (1) Pubilc :任何公有成员可以被外部的类访问。
    • (2) Private :只有同一个类中的函数可以访问它的私有成员。
    • (3) Protected :该类内部和继承类中可以访问。
    • (4) internal : 同一个程序集的对象可以访问。
    • (5) Protected internal :3 和 4 的并集,符合任意一条都可以访问。

    范围比较:

    private < internal/protected < protected internal < public

最新文章

  1. c# 本周时间查询
  2. [译]:Xamarin.Android开发入门——Hello,Android深入理解
  3. C#-WebForm-ASP开发练习:从数据库中动态添加信息
  4. C#-WebForm-WebForm开发基础
  5. Normalize.css – 现代 Web 开发必备的 CSS resets
  6. 如何在Ubuntu上配置scala教程
  7. 发布一个UDP调试助手
  8. Windows 下使用 GNUstep 编译并运行 Objective-C 程序
  9. python 自动生成C++代码 (代码生成器)
  10. StackExchange.Redis的使用
  11. linux下查询域名或IP注册信息的操作记录(whois)
  12. 构建可克隆的对象(ICloneable)
  13. jquery技巧(持续更新。。)
  14. Hadoop权威指南学习笔记二
  15. SpringMVC(五):@RequestMapping下使用@RequestParam绑定请求参数值
  16. 深入理解Linux内核 学习笔记(3)
  17. Iterator接口(迭代器)
  18. JAVA进阶7
  19. java 日志框架
  20. 前端诡异参数start

热门文章

  1. 关于cnblogs的排版
  2. 从【MySQL server has gone away】说起
  3. android 建数据库 SQLite 存储sd 卡或者内存
  4. Atitit。激活某个程序的api&#160;attilax总结
  5. DDR 复位
  6. [个人开发人员赚钱九]做一个日收入10元的APP!
  7. SQL 数据库分页语句
  8. makefile之short函数
  9. 蓝牙(CoreBluetooth)-中心设备(客户端)
  10. 迅搜sdk试用