Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为参数对象创建常规类还是内部类?_C#_.net_Naming Conventions_Inner Classes_Parameter Object - Fatal编程技术网

C# 为参数对象创建常规类还是内部类?

C# 为参数对象创建常规类还是内部类?,c#,.net,naming-conventions,inner-classes,parameter-object,C#,.net,Naming Conventions,Inner Classes,Parameter Object,我没有将许多参数传递给一个方法,而是将其封装到一个参数对象中 注:简化为演示版 在这种情况下,什么做法更好? •创建一个类,并将其命名为inventorySaverags? --或者-- •创建一个嵌套类,并将其命名为SaveArgs 你能解释一下为什么一个人会选择其中一个吗 [编辑]:该参数类型也将在其他程序集中使用 附带问题:奇怪的是,是否有一个模式名用于将多个参数封装到单个对象中 [更新]:在MSDN上 InventorySaveArgs应该可以从其他程序集中使用,因此我将使用一个常规类

我没有将许多参数传递给一个方法,而是将其封装到一个参数对象中

注:简化为演示版

在这种情况下,什么做法更好?

•创建一个类,并将其命名为
inventorySaverags

--或者--
•创建一个嵌套类,并将其命名为
SaveArgs

你能解释一下为什么一个人会选择其中一个吗

[编辑]:该参数类型也将在其他程序集中使用

附带问题:奇怪的是,是否有一个模式名用于将多个参数封装到单个对象中

[更新]:在MSDN上

InventorySaveArgs
应该可以从其他程序集中使用,因此我将使用一个常规类。

我将它命名为
InventorySaveArgs
,以防您希望其他类型可以使用该类型。如果您从一开始就将其命名为InventorySaverags,那么如果您需要重构,您将拥有一个在所有上下文中都有意义的名称。

IIRC.NET设计准则对此非常明确-不应该有公共嵌套类型。

我会选择第一个,创建一个外部类并将其命名为InventorySaverags。如果在公共方法中使用了特定的类,则不将其包含在类之外的唯一参数是名称空间污染


坦率地说,在C#中,拥有内部类是非常烦人的,因为您必须不断地在类型名称前面加上类的名称。如前所述,一旦它公开,donig的唯一动机就是减少名称空间污染。但是,如果您的命名空间太大,以至于InventorySaveArgs类将其变得太大,那么您可能需要拆分您的命名空间。

我听说过的将多个参数封装到单个对象的唯一模式是一个

+1:多么合适的命名模式。。参数对象。。谁会想到呢!这不正确。您应该避免使用公共嵌套类型,但有时使用这些类型是有充分理由的:好的,该规则有一个极为罕见的异常,但在这里不适用。有关CLR异常示例,请参阅WinForms ListView,它有六个嵌套的公共集合类型。它们是嵌套的,因为它们打算与ListView一起使用。其他WinForms控件具有类似的嵌套类型。