c# – 从自定义结构/类型中公开常用值

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

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

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.

(大多数是从this question复制但具有更具体且不直接相关的问题.)

最佳答案 属性是一个好主意,除非你声明一些永远不会改变的东西.

使用属性,您可以更改内部实现,而不会影响使用库的程序并处理更改/变化.消费程序不会破坏,也不需要重新编译.

例如(我知道这是一个糟糕的例子,但你明白了……)

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;
    }
}

另请注意,如果您决定将某个字段更改为某个属性,则会消耗代码中断.

点赞