D365 FO最佳实践BP(七)-构造函数应该Protected

BPErrorClassNewNotProtected: The constructor (i.e. the 'new' method) should be protected. In addition, private constructors are allowed on final classes.
如果类的new方法定义为public,会报上述BP。
提示也很明确,类的构造函数new方法,应该是protected,另外,如果类是final的,构造函数也可以是private的。
第二句容易理解,如果一个类不是final,但是构造函数new是private的,子类都没办法实例化了,所以如果要定义private类型的构造函数,只能是不可继承的类。
第一句,为什么AX要推荐使用protected类型的new方法。
因为X++不支持方法的重载,构造函数也只能有一个new方法,所以AX推荐的做法是
1.new方法设置为protected(如果是final类,也可以设置为private)
2.new方法不带任何参数
3.使用new*静态方法
4.通过parm方法给相应的变量赋值
这样如果类有多个不同的入参,可以定义多个静态的new*方法,*可以用描述性的词语来代替,这样的做法使得累的实例化更加具有描述性。
当然如果一个类特别简单,不可能有多个入参,直接用new也不是什么大问题,要不然就弄成一个protected的,然后加一个public的静态construct方法。

原文地址:https://www.cnblogs.com/Farseer1215/p/13062391.html