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

相关文章

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

C# dateTimePicker 显示年月日,时分秒

dateTimePicker默认只显示日期,如果需要显示年月日,时分秒,只需要以下两步: 1.dateTimePicker1.Format = DateTimePickerFormat.Time 2.dateTimePicker1.CustomFormat = yyyy-MM-dd HH:mm:ss Tips:  a. dateTimePicker1.ShowUpDown = t

C#关闭指定时间段的Excel进程的方法

private DateTime beforeTime;            //Excel启动之前时间          private DateTime afterTime;               //Excel启动之后时间          //举例          beforeTime = DateTime.Now;          Excel.Applicat

C# 防止按钮botton重复“点击”的方法

在使用C#的按钮控件的时候,经常我们想如果出现了多次点击的时候只让其在执行的时候只响应一次。这个时候很多人可能会想到使用Enable=false, 但是实际情况是还是会被多次触发,因为C#采用的是消息队列机制,这个时候我们只需要在Enable = true 之前加一句 Application.DoEvents();就能达到防止重复点击的问题。 private void btnGenerateSh

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

[图]12大编程语言收入排行榜

计算机软件开发或者说程序员工作已经成为收入最高的职业之一。BI最近的一份报告显示,近两年美国软件工程师的平均年薪已经接近10万美元(下图),与之相比欧洲的软件工程师的收入要少得多,平均年薪月5.5万美元,不过比去年同期增长了9%,呈现上升势头。 但值得注意的是,不同编程语言技巧的市场价值不同,最近Quartz对编程语言的价值进行评估后给出了收入最高的12个编程语言排行榜。Quar