这似乎是一项微不足道的任务,但我无法找到如何做到(并且不知道该怎么称呼它)。
实施例。我需要类state
,实际上只是字符串列表。必须这样做:
state s = new state();
s.Add("John Madden");
//s[0] == "John Madden"
我需要向这个类添加一些方法。
答案 0 :(得分:6)
你可以继承它:
public class State : List<string>
{}
这样,您就拥有List<string>
提供的完整界面,以及您自己的类型名称。然后你可以去,并添加自己的方法。
如果您想要更多地控制它,例如要隐藏某些方法或更改它们的工作方式,您还可以创建一个实现IList<string>
的包装类,并将其大部分方法委托给私有List<string>
实例。例如。像这样:
public class State : IList<string>
{
private List<string> internalList = new List<string>();
public string this[int index]
{
get { return internalList[index]; }
set { internalList[index] = value; }
}
public void Add (string item)
{
internalList.Add(item);
}
// etc. for the other IList<T> members
}
答案 1 :(得分:1)
我不知道您的确切要求,但也许这是一种坚持使用List并使用扩展方法来实现其他功能的合适方法。
public static class ListExtensions
{
public static void DoSomethingWithMyStrings (this List<string> list)
{
// Implement your additional functionality here
}
}
// Usage:
using ListExtensions;
var myList = new List<string>();
myList.Add("blah");
myList.DoSomethingWithMystrings ();
答案 2 :(得分:0)
我不会继承列表,而是选择封装一个(为什么可以找到here的一个很好的理由)。
如果您需要State
保持自定义状态相关方法,则它们与List<string>
派生类无关。
public class State
{
public List<string> FooBar { get; set; }
public void Foo() { }
public void Bar() { }
}
答案 3 :(得分:0)
尝试继承Collection<String>
,这是使用List的更好方式:Collection versus List what should you use on your interfaces?
public class State : Collection<string>
List不能通过子类化来轻松扩展;它 旨在快速进行内部实施。你会注意到的 它上面的方法不是虚拟的,因此不能被覆盖 没有挂钩添加/插入/删除操作。