当前位置: 首页 > news >正文

C#8、有哪些访问修饰符

在 C# 中,访问修饰符(Access Modifiers) 用于控制类、方法、字段、属性等成员的可见性访问权限。作为初级 C# 工程师,掌握这些修饰符非常重要。

C# 主要有 6 种访问修饰符,但其中常用的有 5 个(private protected 是较新的组合)。下面我用清晰的方式为你介绍:


✅ 1. public

  • 含义:完全公开,任何地方都可以访问
  • 适用范围:类、结构、方法、字段、属性等。可以在另一个程序集中任何类访问。
  • 示例
    public class Car
    {public string Model; // 任何代码都能访问
    }
    

💡 项目入口 Main 方法必须是 publicprivate(通常为 public static void Main)。


✅ 2. private

  • 含义仅限当前类内部可以访问,外部(包括子类)都无法访问。
  • 默认修饰符:类的成员(字段、方法等)如果不写访问修饰符,默认就是 private
  • 示例
    public class BankAccount
    {private decimal balance = 0; // 只有 BankAccount 类内部能直接访问public void Deposit(decimal amount){balance += amount; // ✅ 类内部可以访问}
    }// 其他类中:
    var account = new BankAccount();
    // account.balance = 100; // ❌ 编译错误!无法访问 private 成员
    

✅ 3. protected

  • 含义当前类 + 所有派生类(子类) 可以访问,其他类不行。
  • 用途:常用于继承场景,让子类能访问父类的某些成员。
  • 示例
    public class Animal
    {protected string name;
    }public class Dog : Animal
    {public void SetName(string n){name = n; // ✅ 子类可以访问 protected 成员}
    }// 其他非子类:
    var animal = new Animal();
    // animal.name = "Tom"; // ❌ 编译错误!不能从外部访问
    

✅ 4. internal

  • 含义同一个程序集(Assembly)内可以访问(比如同一个 .exe.dll 项目)。
  • 跨项目不可见:如果另一个项目引用了这个程序集,就无法访问 internal 成员。
  • 示例
    internal class Helper
    {internal static void Log(string msg) { ... }
    }
    

    如果你的项目叫 MyApp,那么 MyApp 里的所有类都能访问 Helper;但引用 MyApp.dllOtherApp 就不能。

💡 小技巧:可通过 [assembly: InternalsVisibleTo("FriendProject")] 让指定外部程序集也能访问 internal 成员(用于单元测试等)。


✅ 5. protected internal(组合修饰符)

  • 含义:满足 protectedinternal 任一条件即可访问。
    • 同一程序集内的任何类 ✅
    • 不同程序集中的派生类 ✅
  • 不是“又受保护又是内部”,而是“受保护 内部”。
示例:
public class Base
{protected internal string Info;
}// 情况1:同一程序集中的非子类
class OtherClass
{void Test(){var b = new Base();b.Info = "OK"; // ✅ 同一程序集,可以访问}
}// 情况2:不同程序集中的子类
class Derived : Base
{void Test(){Info = "OK"; // ✅ 是子类,即使在不同程序集也可以}
}

✅ 6. private protected(C# 7.2 引入)

  • 含义同一程序集中的派生类才能访问。
  • 相当于 protectedinternal交集(AND),而不是并集。
  • 使用较少,但在需要严格限制继承访问时有用。
public class Base
{private protected string Secret;
}// 同一程序集中的子类 ✅
class Derived : Base
{void Test() => Secret = "OK";
}// 同一程序集中的非子类 ❌
class Other
{void Test(){var b = new Base();// b.Secret = "..."; // ❌ 不能访问}
}// 不同程序集中的子类 ❌(即使继承了也不能访问)

📌 总结表

修饰符同一类同一程序集派生类(同程序集)派生类(不同程序集)
public
protected
internal
protected internal
private protected
private

🔔 注意:类本身的访问修饰符只能是 publicinternal(默认是 internal)。

问题

protected 和private-protected访问修饰符有什么区别?

private-protected仅在声明程序集中可用。

http://www.dtcms.com/a/598973.html

相关文章:

  • 西安 h5网站建设ui培训完找工作没人要
  • 做外汇需要了解的网站中国企业500强全部名单
  • php后台网站开发企业宣传报道模板范文
  • 建站公司新闻资讯做自己的网站不是免费的
  • unique_ptr和shared_ptr的引用计数机制有何不同?
  • 用c# 制作一个扑克牌小游戏
  • 买了域名如何做网站南昌有哪些做网站的公司
  • 京东商品详情接口深度解析:从反爬绕过到数据结构化重构
  • 微网站制作电话做的网站被注销
  • @Transactional失效的几种情况
  • 一般什么行业做网站的多袜子技术支持深圳网站建设
  • 网站策划书撰写流程河北seo推广系统
  • Java 全栈 Devs【应用】:[特殊字符] Java 异常处理最佳实践
  • 在线一键建站系统禹城做网站
  • Yolo中的检测头
  • 张家界建设局网站电话号码模板建站费用
  • 走进Linux的世界:进程状态
  • 毕设做网站需要买域名么网站建设方案之目标
  • 交叉熵损失函数(Cross-Entropy Loss)个人理解
  • 结对编程:提升编程效率与团队协作的最佳实践 | 如何通过结对编程实现高效协作和代码质量提升
  • 缓存优化(SpringCache、XXL-JOB)
  • 网站建设长期待摊费用个人网站的留言板怎么做
  • 优惠劵网站怎么做srm系统
  • Hugging Face Gated 模型下载全攻略:解决 401/403 和访问受限问题
  • 建筑行业网站模板ajax实现wordpress导航栏
  • 网站建设服务 杭州甜品店网页模板html
  • 状态机的实现方法--C语言版本
  • 网站做app开发有梦商城公司网站
  • 网站开发系统毕业综合实践报告电子版个人简历模板
  • 线代强化NO5|矩阵的运算法则|分块矩阵|逆矩阵|伴随矩阵|初等矩阵