这个模式有名字吗?(C#编译时类型安全参数不同于“params”类型)这个模式有名字吗?假设你想创建一个方法,它接受可变数量的参数,每个参数必须是一组固定的类型(以任何顺序或组合),加上一些你无法控制的类型。一种常见的方法是让你的方法接受一个对象类型的参数,并在运行时验证类型:)参数);elseif(argisSomeOtherType)DoSomethingElseWith((SomeOtherType)arg);//...等等elsethrownewException("bogusarg");但是比方说,像我一样,您痴迷于编译时类型安全并且希望能够在编译时验证您的方法的参数类型。这是我想出的一个方法:voidMyMethod(paramsMyArg[]args){//...等}structMyArg{privateMyArg(objectobj){this.TheRealArg=obj;}//对于您希望方法接受的每种类型(下面用“GoodType”表示),定义一个隐式转换运算符,如下所示:staticpublicimplicitoperatorMyArg(GoodTypex){returnnewMyArg(x);隐式转换允许您将有效类型的参数直接传递给例程,而无需显式转换或包装它们。如果您尝试传递一个不可接受类型的值,将在编译时捕获错误。我确定其他人已经使用过这种方法,所以我想知道是否有这种模式的名称。Interwebs上似乎没有命名模式,但根据Ryan对你的问题的评论,我对模式名称的投票应该是VariadicTypesafety。总的来说,我很少使用它,但我不认为这种模式是好是坏。许多评论者提出了优点和缺点,我们看到了其他模式,如工厂、服务定位器、依赖注入、MVVM等。它们都是关于上下文的。所以这里有一个刺......上下文必须处理一组可变的不同对象。使用您的方法时,可以接受不具有公共基类型的不同类型的可变数量参数。您的方法被广泛使用(即在许多地方被您的代码和/或框架的大量用户使用。关键是类型安全提供了足够的好处以保证其使用。参数可以按任何顺序传递,但是不同的类型是有限的,并且该方法只接受集合。表现力是您的设计目标,并且您不想让用户承担创建包装器或适配器的责任(请参阅备选方案)。实现您已经提供的内容。替代示例它被称为反模式,通常被称为恶作剧者。更新:如果args的类型始终是常量并且顺序无关紧要,则创建重载,每个重载在每个方法中都采用一个集合(IEnumerable)作为类型您需要对更改T进行操作。这将通过以下方式降低代码复杂性:删除MyArg类如果您尝试使用无法处理的参数列表调用方法,则无需在MyMethod中进行类型转换将增加额外的编译时类型安全性,你会得到一个编译器异常。这看起来像是Composite模式的一个子集。引用自维基百科:复合模式描述了一组对象,这些对象的处理方式与对象的单个实例相同。以上是C#学习教程:ThispatternhasName?(C#编译时类型安全和“params”不同类型的args)分享的全部内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络收藏,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
