类设计:直接或通过方法访问List <T>?

Pet*_*ger 1 .net c# oop class

对于新闻编辑室系统,我有一个包含单个新闻故事的课程.在这个类中是一个私有变量,它包含一个通用的图像类列表.作为单个故事的想法可以包含多个图像.

问题是我应该将List变量设为公共,以便我可以通过直接寻址List来添加/删除图像

public class News
{
    private _images List<Images>();

    public Images
    {
      get { return _images; }
      set { _images = value }
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

我应该将List变量设为私有,然后创建操作它的方法:

public class News
{
    private _images List<Images>();

    public void AddImage( Image image )
    public Image GetImage( int imageId )
    public int GetImageCount()
    public void DeleteImage( int imageId )
}
Run Code Online (Sandbox Code Playgroud)

我的蜘蛛意识告诉我要做的更晚,因为它更抽象的东西.但另一方面,它创造了更多的代码.

Bri*_*sen 8

通过公开List,您可以公开实现细节.它会在短期内变得更容易,但如果您决定将列表更改为其他容器(或许您需要使用字典进行查找或其他操作),您将很难以后使用.

我会封装它,因为它将使类型在未来更容易维护和增强.


Tor*_*gen 7

我将列表的只读视图作为IList或IEnumerable,以及添加和删除元素的方法.像这样:

public class News
{
    private _images List<Images>();

    public IList<Image> Images
    {
        get {return _images.AsReadOnly(); }
    }

    public void AddImage(Image image)
    {
        _images.Add(image);
        // Do other stuff...
    }

    public void DeleteImage(Image image)
    {
        _images.Remove(image);
        // Do other stuff...
    }
}
Run Code Online (Sandbox Code Playgroud)