我们可以在构造函数中断创建对象吗?

Ser*_*gey 17 c# constructor

请问你能帮帮我吗.我有一个想法但不知道如何实现它.

所以问题是:我们可以中断在构造函数中创建一个对象,即

//Code

SomeClass someClass = new SomeClass(someCriteria);
Run Code Online (Sandbox Code Playgroud)

因此,如果someCriteria没有回答我们的要求,我们不应该创建一个对象,而应该返回null,而不是新对象.

是否可以在C#中实现它?

Cih*_*kar 21

最好的方法是工厂级,但如果你的班级很小,你可以使用这个:

class SomeClass
    {
        private string _someCriteria;

        private SomeClass(string someCriteria)
        {
            _someCriteria = someCriteria;
        }

        public static SomeClass CreateInstance(string someCriteria)
        {
            if (someCriteria.Length > 2)
            {
                return new SomeClass(someCriteria);
            }
            return null;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {

            // returns null
            SomeClass someClass = SomeClass.CreateInstance("t");

            // returns object
            SomeClass someClass2 = SomeClass.CreateInstance("test");
        }
    }
Run Code Online (Sandbox Code Playgroud)


ble*_*eah 9

如果someCriteria无效,您可能希望使用创建SomeClass实例的工厂类返回null.

  • 这是一个很好的答案,尤其是与@Jan Zyka 结合使用时 (2认同)

Jan*_*yka 5

通常,检查构造函数参数是否有效.如果没有,您通常会抛出异常.

我还阅读了一个很好的建议来提供验证构造函数参数的静态方法.这使您的类的用户可以检查他在构造函数中传递的内容是否成功.那些确定参数正常的人(他们做了某种验证)将直接使用构造函数.

还要考虑类的用户可能使用null而不是对象(如果使用某种工厂类).这通常会导致下一行出现NullPointerException吗?通常最好尽快停止错误的事情,在这种情况下抛出异常并完成.它比返回null更清晰的解决方案,如果有人真的想要(这绝对不是最佳实践),他仍然可以捕获这个异常......

  • 这是一个很好的答案,特别是与@bleeeah结合使用时 (2认同)