IRONSOFTWAREHOME

了解 C# 标志

C#二进制:10分钟或更短时间内获取标志

Tim Corey

8分32秒

C# 标志是一个强大但经常被忽视的功能,它允许开发人员使用位操作管理权限和选项。 在他的视频"C#中的二进制:在 10 分钟内完成标记"视频中,Tim Corey 简明扼要地解释了标记的工作原理以及如何在 C# 中有效利用标记。 在本文中,我们将分解 Tim 在视频中的解释和见解,以便更好地理解 C# Flags。

什么是标记?

Tim 首先介绍了 Flags 的概念。 他解释说,标志允许我们为单个变量分配多个值,因此在管理应用程序中的权限时非常有用。 为了说明这一点,Tim 创建了一个名为SystemPermissions的枚举,其中包括SQL、WebServer、Redis、Azure、GitHub和BuildSystem等各种权限。

Tim 强调如果没有Flags,一个变量一次只能持有一个权限。例如,如果我们尝试将SystemPermissions.BuildSystem,除非我们使用数组,这变得难以管理。

没有标志的问题

此时,Tim 展示了传统枚举作业的局限性。 如果我们一次分配一个权限,那么稍后检查它们就需要遍历一个数组,这既低效又不可扩展。 正如 Tim 所描述的那样,这导致了 "丑陋 "的实现,管理多个权限变得非常麻烦。

介绍标志属性

为了解决这个问题,Tim 引入了[Flags]属性,使一个枚举可以被视为位字段。 他解释说,每个权限都是通过位移法分配一个唯一的二进制值。

Tim 不分配递增数字(0、1、2、3 等),而是使用 2 的幂来分配数值:

[Flags]
enum SystemPermissions
{
    None = 0,
    SQL = 1 << 0,       // 00000001
    WebServer = 1 << 1, // 00000010
    Redis = 1 << 2,     // 00000100
    Azure = 1 << 3,     // 00001000
    GitHub = 1 << 4,    // 00010000
    BuildSystem = 1 << 5 // 00100000
}

Tim 解释说,位移可以确保每个权限都有唯一的值,不会重叠,从而实现多个权限的有效组合。

分配和组合标记

然后,Tim 演示了如何使用位操作分配和组合权限。 他解释说,我们可以通过使用位顺时针 OR( |) 运算符:

SystemPermissions timsPermissions = SystemPermissions.SQL | SystemPermissions.Redis | SystemPermissions.GitHub;

这将SQL、Redis和GitHub权限分配给timsPermissions,使用位操作将它们存储在一个变量中。

使用标记检查权限

Flags 的一个主要好处是能够使用按位与(&)运算符检查是否设置了特定权限。 Tim 演示了如何验证用户是否拥有特定权限:

if ((timsPermissions & SystemPermissions.SQL) == SystemPermissions.SQL)
{
    Console.WriteLine("Tim has SQL access.");
}

Tim 强调说,这种方法比在数组中循环要有效得多,因为它可以快速进行位比较。

删除权限

Tim 还介绍了如何使用按位与和非(~)运算符来移除权限。 如果我们需要从timsPermissions撤销SQL权限,可以这样操作:

timsPermissions &= ~SystemPermissions.SQL;

这将有效删除 SQL 权限,同时保持其他权限不变。

以二进制显示标志

为直观了解 Flags 的工作原理,Tim 建议将枚举值转换为二进制表示法。 他使用辅助方法来显示权限的二进制值:

Console.WriteLine(Convert.ToString((int)timsPermissions, 2));

Tim 解释说,这有助于理解枚举中各个位是如何设置和操作的。

为什么使用标记?

最后,Tim 强调了为什么 Flags 在 C# 中非常有用:

  • 它们允许在一个变量中存储多个值。
  • 它们可以实现高效的权限管理。
  • 这些工具简化了使用位操作检查和修改权限的过程。

他还指出,Flags 常用于文件权限、用户角色和应用程序设置等场景。

最后的想法

在整个视频中,Tim Corey 清晰而实用地演示了 C# Flags 的工作原理。 通过使用[Flags]属性和位运算,我们可以高效地管理多个权限,而不需要复杂的数据结构。 如果您要处理需要多个值的权限或设置,Flags 是简化实施的绝佳工具。

要想亲身体验,请查看 Tim Corey 的 视频,他在视频中逐步解释了这些概念。起初,标记可能看起来很棘手,但一旦你理解了它们的二进制性质,它们就会成为 C# 开发中非常有用的功能。

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

OR
bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户