如何使用一些自定义方法创建只有List <string>的类?</string>

时间:2015-03-04 13:25:42

标签: c# oop

这似乎是一项微不足道的任务,但我无法找到如何做到(并且不知道该怎么称呼它)。

实施例。我需要类state,实际上只是字符串列表。必须这样做:

state s = new state();
s.Add("John Madden");
//s[0] == "John Madden"

我需要向这个类添加一些方法。

4 个答案:

答案 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不能通过子类化来轻松扩展;它   旨在快速进行内部实施。你会注意到的   它上面的方法不是虚拟的,因此不能被覆盖   没有挂钩添加/插入/删除操作。