English 中文(简体)
在方法回归类型包括接口的情况下,采用通用方法的任何缩小?
原标题:Any Downsides to making a method generic where the method return type includes an interface?
  • 时间:2011-11-23 15:35:12
  •  标签:
  • c#
  • generics

考虑一种类似方法:

IEnumerable<IFoo> DoSomethingRequiringIFooInterface(IEnumerable<IFoo> foos)

如果该方法使用国际免疫网界面(过滤或分类),但该方法并不产生实施国际免疫联盟的新目标。

页: 1 • 更好地使这种方法具有通用性:

IEnumerable<TFoo> DoSomethingRequiringIFooInterface<TFoo>(IEnumerable<TFoo> foos)
    where TFoo : IFoo

以便客户能够保持类型? 或者,在你希望做些什么的情况下(或有些情况)?

感谢!

最佳回答

如果返回的数值可能不同于通过中的物体,那么你就不想这样做。 如果所返还的所有要素都需要至少具有与所传递的内容相同的特性,则通用文本是适当的。 因此,如果你的职能始终如一地恢复特别禁忌,那么通用方法就更合适,因为它受到更严格的限制。

问题回答

一种可能的倒数是,如果你想要超负荷使用这种方法:

void F(IFoo x) {}
void F(IBar x) {}

罚款。 但

void F<T>(T x) where T : IFoo {}
void F<T>(T x) where T : IBar {}

没有汇编,因为这两种方法现在都有相同的签字。

如果你利用反思来改变或分析你的法典,可能会出现一些缺点,因为你起草的法典越复杂,思考就更大了。

我倾向于采用通用方法,因为你总是能够用国际红十字与红新月联会确定方法,其结果与非基因方法相同:

DoSomethingRequiringIFooInterface<IFoo>(...);

And also you give better type safety options to user baecause he can do (if Foo1 : IFoo) :

DoSomethingRequiringIFooInterface<Foo1>(...);

确切知道他正在读到<代码>。 缩略语

因此,这意味着通用方法较好,因为除了他必须写出更多的文字外,还给用户更多的选择,而且不会给我们带来任何损失。

当你尝试使用两种不同的<条码>时,情况就会缩小。 缩略语

DoSomethingRequiringIFooInterface({ new AFoo(), new BFoo() });

利用第一版,这项工作将发挥作用。 第二次选举胜诉。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签