从自定义结构/类型中公开公共值
本文关键字:类型 自定义 结构 | 更新日期: 2023-09-27 18:04:30
我的一个项目有一个值类型/结构,它表示视频格式的自定义标识符字符串。在本例中,它将包含一个内容类型字符串,但这可以变化。
我使用了一个结构体,所以当它被传递时,它可以是强类型的,并对初始字符串值执行一些完整性检查。
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
提供静态只读字段,System.Int32
为MinValue
提供const。
属性是一个好主意,除非你声明的东西永远不会改变。
使用属性,你可以改变内部实现而不影响程序使用你的库和处理变化/变化。消费程序不会中断,也不需要重新编译。
。(我知道这是一个不好的例子,但你知道的…)
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;
}
}
还请记住,如果您决定在将来将字段更改为属性,则会消耗代码中断。