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

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

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

//Code SomeClass someClass = new SomeClass(someCriteria); 

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

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

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

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

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

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

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

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

如果构造函数的参数无效,请考虑抛出ArgumentException或其后代类之一(例如ArgumentOutOfRangeException )。

那是可能的。 另一种方法是在创建对象之前进行检查。 像这样

 SomeClass someClass = null; if (someCriteria == VALID) { someClass = new SomeClass(someCriteria); } 

希望这可以帮助。

不,不可能直接。

您可以抛出exception并添加所需的代码以检查exception并为您的变量赋值null。

更好的解决方案是使用Factory,如果某些条件失败,将返回null。

 var someClass = SomeClassFactory.Create(someCriteria); if(someClass != null) { } 

new构造保证将返回一个对象(或抛出exception)。 因此,作为bleeeah推荐,工厂或类似的概念将允许您应用您的逻辑。