从自定义结构/类型公开通用值

2024-05-15

我的一个项目有一个值类型/结构,表示视频格式的自定义标识符字符串。在本例中,它将包含内容类型字符串,但这可能会有所不同。

我使用了一个结构体,因此它在传递时可以是强类型的,并对初始字符串值执行一些健全性检查。

public struct VideoFormat {
    private string contentType;

    public VideoFormat(string contentType) {
        this.contentType = contentType;
    }

    public string ContentType {
        get { return this.contentType; }
    }

    public override string ToString() {
        return this.contentType;
    }

    // various static methods for implicit conversion to/from strings, and comparisons
}

由于有一些非常常见的格式,我将它们公开为具有默认值的静态只读字段。

public static readonly VideoFormat Unknown = new VideoFormat(string.Empty);
public static readonly VideoFormat JPEG = new VideoFormat("image/jpeg");
public static readonly VideoFormat H264 = new VideoFormat("video/h264");

将公共值公开为静态只读字段还是仅获取属性更好?如果我以后想更改它们怎么办?我看到整个 .Net 框架都使用了这两种方法,例如System.Drawing.Color使用静态只读属性,同时System.String有一个静态只读字段String.Empty, and System.Int32有一个常量MinValue.

(大部分是复制自这个问题 https://stackoverflow.com/q/15488575/588306但有一个更具体且不直接相关的问题。)


属性是个好主意,除非你声明的东西never变化。

通过属性,您可以更改内部实现,而不会影响使用您的库的程序并处理更改/变化。使用程序不会中断,也不需要重新编译。

例如(我知道这是一个不好的例子,但你明白了..)

public static VideoFormat H264Format
{
   get{
         // This if statement can be added in the future without breaking other programs.
         if(SupportsNewerFormat)
             return VideoFormat.H265;

         return VideoFormat.H264;
    }
}

另请记住,如果您决定将来将字段更改为属性,则消耗代码会中断。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从自定义结构/类型公开通用值 的相关文章

  • Exit() 时是否调用基本对象析构函数?

    我意识到这个问题已经出现过几次 但我试图获得上述问题的明确答案 但我不断遇到相互矛盾的信息 我需要知道的是 当我使用 exit 时 基本类对象是否被破坏 我知道需要删除动态内存 但我的意思更像是 include
  • 在 HKCR 中创建新密钥有效,但不起作用

    我有以下代码 它返回 成功 但使用两种不同的工具使用搜索字符串 3BDAAC43 E734 11D5 93AF 00105A990292 搜索注册表不会产生任何结果 RegistryKey RK Registry ClassesRoot C
  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • 转换 const void*

    我有一个函数返回一个const void 我想用它的信息作为char 我可以将它投射为 C 风格的罚款 char variable但是当我尝试使用reinterpret cast like reinterpret cast
  • 前向声明类型和“已声明为类类型的非类类型”

    我对以下代码有问题 template
  • MVC3中设置下拉列表中的所选项目

    我必须为视图中的下拉列表设置所选项目 但它不起作用 View div class editor label Html LabelFor model gt model Gender div div class editor field Htm
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 如何在 C# Designer.cs 代码中使用常量字符串?

    如何在 designer cs 文件中引用常量字符串 一个直接的答案是在我的 cs 文件中创建一个私有字符串变量 然后编辑 Designer cs 文件以使用此变量 而不是对字符串进行硬编码 但设计者不喜欢这样抛出错误 我明白为什么这行不通
  • Eigen 和 OpenMP:由于错误共享和线程开销而没有并行化

    系统规格 Intel Xeon E7 v3 处理器 4 插槽 16 核 插槽 2 线程 核心 Eigen 系列和 C 的使用 以下是代码片段的串行实现 Eigen VectorXd get Row const int j const int
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 将函数参数类型提取为参数包

    这是一个后续问题 解包 元组以调用匹配的函数指针 https stackoverflow com questions 7858817 unpacking a tuple to call a matching function pointer
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • C++ 对象用 new 创建,用 free() 销毁;这有多糟糕?

    我正在修改一个相对较大的 C 程序 不幸的是 并不总是清楚我之前的人使用的是 C 还是 C 语法 这是在一所大学的电气工程系 我们 EE 总是想用 C 来做所有事情 不幸的是 在这种情况下 人们实际上可以逃脱惩罚 但是 如果有人创建一个对象
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names

随机推荐

  • 如何从 HttpClient 获取最后一个 url?

    好的 我最近切换到 NET Framework 4 5 并开始使用 HttpClient 而不是 HttpWebRequest Response 我真的很喜欢异步 等待风格 但我不知道如何在 POST GET 请求后获取重定向的 url 通
  • 宏未产生所需的结果

    我是 C 新手 之前来自 Python 我对这部分代码感到困惑 include
  • 将公钥从其他地方导入到 CngKey?

    我正在寻找一种跨平台的方式来共享 ECDSA 签名的公钥 从性能角度来看 我对 CngKey 和标准 NET 加密库感到非常高兴 但后来我无法弄清楚 33 或 65 字节公钥 使用 secp256r1 P256 如何变成 104 字节由 M
  • 使用 lambda 对多列进行分组

    如何使用 lambda 对多列进行分组 我看到了如何使用 linq toEntity 执行此操作的示例 但我正在寻找 lambda 形式 var query source GroupBy x gt new x Column1 x Colum
  • 在 C# 中从另一个子窗体调用一个子窗体

    我有3种表格 FormS FormS和FormS 其中FormAT是mdiParent表格 表格B和C是子表格 我在 FormA 加载事件中编写以下代码 private void frmMain Load object sender Eve
  • 用于创建动画渐变按钮背景的 CSS

    我正在寻找一个CSS规则可以创建一个CSS动画按钮的彩色渐变背景 https i stack imgur com NHqf8 gif 我只是想玩它并这样做 https codepen io prashant nadsoftdev pen b
  • JsonCpp - 当有 json::Value 对象时,我如何知道它的键名称?

    假设我有这个 Json 文件 id 0 使用 jsoncpp 我可以有一个Json Value通过这样做来对象 Json Value node root 0u id 好的 在代码的其他地方 我明白了node对象 我想从中获取一些信息 我可以
  • void *userData 到底是什么?

    在C函数声明中 我看到了这个参数定义 void userData 那么 那到底是什么 我的猜测 虚空说它可以是任意的东西 甚至什么都不是 几乎和objective c的id类似 它只允许传入您喜欢的任何数据结构 userData 前面的星号
  • 左填充 printf 带空格

    使用 printf 时如何在字符串左侧填充空格 例如 我想打印 Hello 前面有 40 个空格 另外 我要打印的字符串由多行组成 我需要单独打印每一行吗 编辑 为了明确起见 我希望在每行之前打印 40 个空格 如果您希望在 40 个字符宽
  • 使用 Matplotlib 绘制二维数组

    所以我有一个二维数组 名为 Data 如下所示 Shape 0 Shape 1 Shape N Scale 0 Value00 Value01 Value0N Scale 1 Value10 Value11 Value1N Scale N
  • jQuery 计算所有文本字段中值的总和

    我有一个订单表单 其中包含大约 30 个包含数值的文本字段 我想计算所有这些模糊值的总和 我知道如何选择所有文本字段 但不知道如何循环它们并添加它们的所有值 document ready function price blur functi
  • 由于 lpcap,CPAN 安装 Net::Pcap 和 Packet 模块失败

    最近 我尝试通过 cpan 安装 perl 模块 Net Packet 和 Net Pcap 但它抱怨找不到 pcap 库 所以我正在搜索 cpan 在安装模块时是否接受外部 lib include 目录 但到目前为止还没有运气 looki
  • 有关 CMake 错误的问题:没有为目标提供源

    我正在尝试使用 cmake 和 eclipse 将 FreeRtos 添加到我的项目中 但出现错误 我运行的是 debian 10 我的 cmake 版本是 3 13 4 cmake 的文件可以在以下位置找到这个 git 仓库 https
  • 如何更改 SAM 模板中 API 阶段的名称?

    我正在使用 SAM 部署 Lambda 函数 并使其可通过 API Gateway 通过 HTTP 进行调用 大致使用以下模板片段 MyFunction Type AWS Serverless Function Properties Eve
  • 将 C# Xamarin.forms.image 转换为 CGImage

    我正在尝试将 Xamarin forms image 转换为 CoreGraphics CGImage void saveImg Xamarin Forms Image image CoreGraphics CGImage CGImage
  • 创建面向鼠标和触摸的 WPF 应用程序的最佳实践[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用滑动窗口动画 ggplot 时间序列图

    我正在寻找在不失去分辨率的情况下对长时间序列图进行动画处理的方法 我希望视图能够 平移 数据 显示从开始到结束的滑动子集 假设我有以下内容 library ggplot2 library dplyr library gganimate df
  • 从标签 ID 更改整个 gridview 单元格颜色

    试图弄清楚当我有标签 ID 时如何更改 gridview 单元格的背景颜色
  • Python:使类可迭代

    我继承了一个包含许多大型类的项目 这些类仅由类对象 整数 字符串等 组成 我希望能够检查属性是否存在 而无需手动定义属性列表 是否可以制作一条蟒蛇classiterable 本身使用标准语法 也就是说 我希望能够使用迭代所有类的属性for
  • 从自定义结构/类型公开通用值

    我的一个项目有一个值类型 结构 表示视频格式的自定义标识符字符串 在本例中 它将包含内容类型字符串 但这可能会有所不同 我使用了一个结构体 因此它在传递时可以是强类型的 并对初始字符串值执行一些健全性检查 public struct Vid