C# 编程语言中访问修饰符(access modifiers)

2024-03-23 14:36

本文主要是介绍C# 编程语言中访问修饰符(access modifiers),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C#访问修饰符

  • `protected` 访问修饰符:
  • 1. `public` 访问修饰符:
  • 2. `private` 访问修饰符:
  • 3. `internal` 访问修饰符:
  • 4. `protected internal` 访问修饰符:

在 C# 编程语言中,有多个访问修饰符(access modifiers),其中包括 protected。这些修饰符用于控制类、成员和属性的访问级别和可见性。

protected 访问修饰符表示一个成员(字段、属性、方法)或类只能在其定义的类内部和该类的派生类中进行访问。也就是说,protected 成员可以在定义它们的类内部直接访问,以及在继承该类的派生类中进行访问。

下面是一些对 protected 访问修饰符的详细解释和示例说明:

protected 访问修饰符:

  1. protected 成员的特点:

    • protected 成员可以在定义它们的类内部直接访问。
    • protected 成员可以在继承该类的派生类中进行访问。
    • protected 成员对于类外部的代码是不可见的。
  2. protected 成员的使用场景:

    • 当一个类的某个成员需要在该类的派生类中使用,但对于其他类来说应该是不可见的时,可以将该成员声明为 protected
    • protected 成员通常用于实现类的继承和多态性。

下面是一个示例代码,演示了 protected 成员的使用:

public class Animal
{protected string name; // 声明一个 protected 字段protected void PrintName() // 声明一个 protected 方法{Console.WriteLine("Animal Name: " + name);}
}public class Dog : Animal
{public Dog(string dogName){name = dogName; // 在派生类中访问基类的 protected 字段}public void DisplayName(){PrintName(); // 在派生类中调用基类的 protected 方法}
}public class Program
{public static void Main(){Dog dog = new Dog("Buddy");dog.DisplayName(); // 输出:Animal Name: Buddy}
}

在上面的示例中,Animal 类定义了一个 protected 字段 name 和一个 protected 方法 PrintName()。派生类 Dog 继承了 Animal 类,并在其构造函数中访问了基类的 protected 字段。派生类还通过调用基类的 protected 方法 PrintName() 来输出动物的名称。

需要注意的是,如果尝试在 Main 方法中直接访问 Animal 类的 name 字段,会导致编译错误,因为 protected 成员对于类外部的代码是不可见的。只有在派生类内部才能访问 protected 成员。


除了 protected 访问修饰符外,C# 还提供了其他几个常用的访问修饰符,它们分别是:

1. public 访问修饰符:

  • public 成员可以在任何地方进行访问,包括类内部、派生类和其他类。
  • public 成员对于所有代码都是可见的。

下面是一个示例代码,演示了 public 访问修饰符的使用:

public class Person
{public string Name; // 声明一个 public 字段public void SayHello() // 声明一个 public 方法{Console.WriteLine("Hello, my name is " + Name);}
}public class Program
{public static void Main(){Person person = new Person();person.Name = "John"; // 在类外部访问 public 字段person.SayHello(); // 在类外部调用 public 方法,输出:Hello, my name is John}
}

在上面的示例中,Person 类定义了一个 public 字段 Name 和一个 public 方法 SayHello()。这意味着这些成员可以在类内部和类外部的任何地方进行访问。

2. private 访问修饰符:

  • private 成员只能在其定义的类内部进行访问。
  • private 成员对于类外部的代码是不可见的。

下面是一个示例代码,演示了 private 访问修饰符的使用:

public class Car
{private string model; // 声明一个 private 字段private void StartEngine() // 声明一个 private 方法{Console.WriteLine("Engine started");}public void Drive(){StartEngine(); // 在类内部调用 private 方法Console.WriteLine("Driving the car");}
}public class Program
{public static void Main(){Car car = new Car();car.Drive(); // 在类外部调用 public 方法,输出:Engine started\nDriving the car// car.StartEngine(); // 错误:无法访问 private 方法// car.model = "BMW"; // 错误:无法访问 private 字段}
}

在上面的示例中,Car 类定义了一个 private 字段 model 和一个 private 方法 StartEngine()。这意味着这些成员只能在 Car 类的内部进行访问,对于类外部的代码是不可见的。然而,Car 类还定义了一个 public 方法 Drive(),该方法在类内部调用了 private 方法 StartEngine(),并且可以在类外部进行访问。

3. internal 访问修饰符:

  • internal 成员可以在同一程序集(assembly)内的任何类中进行访问。
  • internal 成员对于不在同一程序集内的代码是不可见的。

下面是一个示例代码,演示了 internal 访问修饰符的使用:

// Assembly1.dll
public class MyClass
{internal int MyField; // 声明一个 internal 字段internal void MyMethod() // 声明一个 internal 方法{Console.WriteLine("Internal method");}
}// Assembly2.dll
public class Program
{public static void Main(){MyClass myObj = new MyClass();myObj.MyField = 10; // 在同一程序集内访问 internal 字段myObj.MyMethod(); // 在同一程序集内调用 internal 方法// Console.WriteLine(myObj.MyField); // 错误:无法访问 internal 字段// myObj.MyMethod(); // 错误:无法调用 internal 方法}
}

在上面的示例中,MyClass 类定义了一个 internal 字段 MyField 和一个 internal 方法 MyMethod()。这些成员可以在同一程序集内的任何类中进行访问,但对于不在同一程序集内的代码是不可见的。

4. protected internal 访问修饰符:

  • protected internal 成员可以在同一程序集内的任何类中进行访问,以及在派生类中进行访问,无论是否在同一程序集内。
  • protected internal 成员对于不在同一程序集内且不是派生类的代码是不可见的。

下面是一个示例代码,演示了 protected internal 访问修饰符的使用:

// Assembly1.dll
public class MyBaseClass
{protected internal int MyField; // 声明一个 protected internal 字段protected internal void MyMethod() // 声明一个 protected internal 方法{Console.WriteLine("Protected Internal method");}
}// Assembly2.dll
public class MyDerivedClass : MyBaseClass
{public void AccessBaseMembers(){MyField = 10; // 在派生类中访问 protected internal 字段MyMethod(); // 在派生类中调用 protected internal 方法}
}public class Program
{public static void Main(){MyBaseClass myObj = new MyBaseClass();// myObj.MyField = 10; // 错误:无法访问 protected internal 字段// myObj.MyMethod(); // 错误:无法调用 protected internal 方法MyDerivedClass derivedObj = new MyDerivedClass();derivedObj.AccessBaseMembers(); // 在派生类外部访问 protected internal 成员}
}

在上面的示例中,MyBaseClass 类定义了一个 protected internal 字段 MyField 和一个 protected internal 方法 MyMethod()。这些成员可以在同一程序集内的任何类中进行访问,以及在派生类中进行访问,无论是否在同一程序集内。然而,对于不在同一程序集内且不是派生类的代码是不可见的。


这些访问修饰符可以帮助我们控制类成员的可见性和访问级别,以满足设计需求并提供适当的封装和封装性。

这篇关于C# 编程语言中访问修饰符(access modifiers)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/838611

相关文章

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

C#中的 StreamReader/StreamWriter 使用示例详解

《C#中的StreamReader/StreamWriter使用示例详解》在C#开发中,StreamReader和StreamWriter是处理文本文件的核心类,属于System.IO命名空间,本... 目录前言一、什么是 StreamReader 和 StreamWriter?1. 定义2. 特点3. 用

如何使用C#串口通讯实现数据的发送和接收

《如何使用C#串口通讯实现数据的发送和接收》本文详细介绍了如何使用C#实现基于串口通讯的数据发送和接收,通过SerialPort类,我们可以轻松实现串口通讯,并结合事件机制实现数据的传递和处理,感兴趣... 目录1. 概述2. 关键技术点2.1 SerialPort类2.2 异步接收数据2.3 数据解析2.