实现继承自的新类的最快方法是什么List<T>
?
class Animal {}
class Animals : List<Animal> {} // (1)
Run Code Online (Sandbox Code Playgroud)
我遇到的一个问题:通过简单地做(1),我发现我没有从继承任何构造函数中获益List<T>
.
最后,我想Animals
表现得很像List<T>
(例如,可以构建,与Linq的兼容性).但另外,我还希望能够添加自己的自定义方法.
我正在考虑一个符合一套合同的集合,但我认为这个问题适用于任何类型..NET框架中是否存在阻止空条目的集合?我想要的具体行为是这样的:
var set = new HashSet<object>();
bool added = set.Add(null);
Console.WriteLine(added); // prints "False"
Run Code Online (Sandbox Code Playgroud)
这不是内置的行为HashSet<T>
.是否存在任何具有此(或类似)行为的集合,或者我最好自己滚动?如果是后者,最好的方法是什么?我应该直接继承HashSet<T>
还是仅包装?
编辑:要清楚,这只是空闲的想知道.主要是因为我想不出任何理由,我会永远想允许null
进入一组对象.我对此没有任何特别需要.
我最近做了一些编程,遇到了一个问题,我在c#中发现了一些奇怪的问题.(至少对于我来说)
public class Foo
{
//whatever
public class FooSpecificCollection : IList<Bar>
{
//implementation details
}
public FooSpecificCollection GetFoosStuff()
{
//return the collection
}
}
Run Code Online (Sandbox Code Playgroud)
我希望Foo的消费者能够获得对FooSpecificCollection的引用,甚至对它执行一些操作.甚至可能将它设置为Foo的其他属性或像这样的smth,但不能创建此类的实例.(应该能够实现此集合的唯一类应该是Foo.
我的要求真的那么牵强吗?我知道人们更明智地定义了c#,但是不应该有这样一个选项,即父类可以创建一个嵌套的类实例,但没有其他人不能.
到目前为止,我创建了一个解决方案,通过属性创建一个抽象类或接口,并实现一个在其他任何地方都无法使用的具体私有类.
这是处理这种情况的正确方法吗?
我不能重载List的Add方法吗?
class ListDemo<T>:List<T>
{
public override T Add<T>(T value)
{
return base.Add(value);
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
1)类型参数"T"与外部类型"CollectionsExample.ListDemo"中的类型参数同名
2)'CollectionsExample.ListDemo.Add(T)':找不到合适的方法来覆盖