字段具有值的义务

本文关键字:义务 字段 | 更新日期: 2023-09-27 18:02:15

可能重复:
在C#/.NET中将参数标记为不可为null?

例如,我有一个简单的类,其中有一个字段:

class User
{
    private readonly string _name;
    public User(string name)
    {
        _name = name;
    }
    public string Name { get { return _name; } }
}

如何禁止将name参数设置为null,因为User应该总是有一些名称?我不能在构造函数内部做这样的检查,因为无论如何实例都会被创建。我应该使用一些模式(制作私有构造函数和添加方法来生成实例……不知道这个模式是如何调用的(还是有任何语言支持来实现这个技巧?

谢谢。

字段具有值的义务

在构造函数中执行检查:如果name参数是null,则抛出ArgumentNullException

我不能在构造函数内部进行这样的检查,因为无论如何实例将被创建。

如果构造函数抛出异常,则不会创建对象实例,因此您不必担心用户无效:

User user = null;
try
{
     user = new User(null); //throws ArgumentNullException
}
catch (ArgumentNullException)
{
    //user == null is true.
}

有两种解决方案:

  • NULL值的情况下,在构造函数处引发异常。这通常被认为是一件坏事(根据杰弗里·里希特的书(
  • 编码合同