English 中文(简体)
• 为接口制定或提供非专用的推广方法?
原标题:Override ToString or provide non-ToString named extension method for an interface?
  • 时间:2011-02-02 00:12:46
  •  标签:
  • c#

我的问题是命名、设计和实施选择。 我可以看到,自己在如何解决问题方面有两个不同方向,我很想知道,哪些人可能已经提出类似关切,会处理该问题。 它是部分美学、部分功能。

A little background on the code... I created a type called ISlice<T> that provides a reference into a section of a source of items which can be a collection (e.g. array, list) or a string. The core support comes from a few implementation classes that support fast indexing using the Begin and End markers for the slice to get the item from the original source. The purpose is to provide slicing capabilities similar to what the Go language provides while using Python style indexing (i.e. both positive and negative indexes are supported).

To make creating slices (instances of ISlice<T>) easier and more "fluent", I created a set of extension methods. For example:

static public ISlice<T> Slice<T>(this IList<T> source, int begin, int end)
{
  return new ListSlice<T>(source, begin, end);
}

static public ISlice<char> Slice(this string source, int begin, int end)
{
  return new StringSlice(source, begin, end);
}

还有其他一些因素,例如提供选择性的起始/终端参数,但上述参数足以使我能够这样做。

这些日常工作做得很好,使得收集或展示容易。 我还需要做的是,作为一块阵列、一个名单或一个插图,制作一个斜体。 这样,事情就得到“利益”。 最初,我认为我需要制定ToArray, ToList教推广方法,但后来记住,如果你的收集能够执行<条码>,则准则的变式可发挥最佳作用;T>。 就我而言,ISlice<T>确实继承了该编码,尽管由于我不喜欢从像Add.这样的方法中 throw弃不支持的疑虑,对我而言很多。 不管怎样,我还是免费。 页: 1

当没有内在支持转换“<代码”时,将背转划为地体有何意义。 缩略语 我发现的最近一点是扼杀。 散射超负荷,但无法像可能那样有效地处理果园。 从设计的角度来看,同样重要的是,它不作为例行的“转变”。

第一个想法是制定一种扩展方法,但随着图谋的形成,这项工作是一种实例方法,这意味着它影响推广方法,永远不会被称作。 我可以推翻《规约》,但行为将不一致,因为<代码>ListSlice<T>将需要对其提出特别案例。 • 积累T果园。 我不喜欢这样说,因为如果平均参数是焦炭的话,那么String会有所助益,但其他情况下的类别名称也会有所助益。 此外,如果在未来的I d中产生其他类型,则必须建立一个共同的基础类别,以确保相同的行为,或者每一类人都必须进行同样的检查。 接口上的延伸方法将更恰当地处理。

延期办法使我产生一个命名公约的问题。 显而易见的是,要利用《商品清单》,但正如前面所述,它不允许。 我可以把它称作什么不同,但什么? 新的结构? 新趋势? 创造环境? 在“前家庭”中,一些方法会使其与ToArray/ToList的例行活动相左,但“新生活”则在电视和编辑中被视而不见。 新的统计/分类并不像你所知道的那样可以发现。 这种方法符合家庭外方法提供的“转化方法”模式。

采取压倒一切的做法,接受难以列入<代码>的不一致的行为。 ListSlice<T> implementation and other implementation? 采用更加灵活但可能更名副其实的推广方法? 是否考虑了第三种选择:

My gut tells me to go with the ToString despite my reservations, though, it also occurred to me... Would you even consider ToString giving you a useful output on a collection/enumerable type? Would that violate the principle of least surprise?

<>Update>

许可操作的大多数实施都提供了从任何来源获得的数据复制件,尽管是分集。 在大多数使用案例中,这完全是可以接受的,因此留下了一种清洁的二字体,因为你只能退回同样的数据类型。 如果你照发一份清单,你将一份清单,其中仅载列文件中规定的范围。 如果你听起来,你会回动。 因此。

上文描述的“Im”号特许行动在遇到使这种行为不受欢迎的限制时,正在解决一个问题。 例如,如果你使用大型数据集,则照相操作将导致不必要的额外记忆分配,更不用提复制数据的业绩影响。 如果在取得最后结果之前,这些专册将进一步处理这些专册,就尤其如此。 因此,切片执行的目标是将参引<>>/em>纳入较大的数据集,以避免在信息变得有利之前提供不必要的副本。

渔获量是,在加工结束时,希望将以斜体为基础的处理数据退回到更多的APIC中。 NET 友好型,如名单、阵列和座标。 这使得数据更容易传送到其他信息预报系统。 这还使你能够丢弃这些遗产,因此,也使大数据集了参考的斜体。

最佳回答

你们甚至会考虑 给你一个收集/数字类型的有用产出? 这是否违反最不惊讶的原则?

无,是。 这完全是意料之外的行为,因为它的行为不同于其他收集类型。

为此:

当没有内在支持转换一个可计算得分的“E”和“Cchar”时,将背转成一个扼子有什么意义?

Personally, I would just use the string constructor taking an array:

string result = new string(mySlice.ToArray());

这一点是明确、理解和预期的——我期望通过把物体传给建筑商来创造新的扼杀。

问题回答

或许,你之所以要把string作为ICollection<char>处理。 你没有详细说明你试图解决的问题,但也许这是错误的假设。

确实,扼杀是一种<代码>。 IEvidable<char>。 但是,正如你注意到,对收集果园进行直接勘测会产生问题。 框架中的“特殊”也同样重要。

从另一端来看,很明显的是,<代码>之间的区别。 ISlice<char>和ISlice<byte>是你可以把前者推到地狱中? 后者的行动是否合理? <代码> ISlice<string>? 我是否也能够召集他们?

或许这些问题会给你解决你的问题。





相关问题
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. ...

热门标签