4

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

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

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.EmptySystem.Int32MinValue.

(主要是从这个问题复制而来,但有一个更具体且不直接相关的问题。)

4

1 回答 1

2

属性是一个好主意,除非你声明的东西永远不会改变。

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

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

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

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

于 2013-03-18T23:50:46.173 回答