首页 > 解决方案 > C# 列表 - 一旦数据在列表中,我是否再次使用类方法(获取/设置等)?

问题描述

关于 OOP 的一个快速问题。我将列表与类和类构造函数一起使用。所以我使用类构造函数来定义数据集,然后在用户创建它们时将每条记录添加到我的列表中。

我的问题是,一旦数据在列表中并说我想更改某些内容,找到记录,使用该记录创建一个实例,然后使用我的类方法做任何需要做的事情是一种好习惯 - 然后将其放回名单?

例如下面我有我的类与构造函数。假设我只希望系统在 Privacy 字段设置为 public 时发布 strCode。现在只使用实例我会使用例如 Console.WriteLine(whateverproduct.ProductCode) 但如果记录已经在列表中,我是否将其从列表中取出 - 创建一个实例然后使用此方法?

class Product
{
    private String strCode;
    private Double dblCost;
    private Double dblNet;
    private String strPrivacy;


    public Product(String _strCode, Double _dblCost, Double _dblNet, String _strPrivacy)
    {
        strCode = _strCode;
        dblCost = _dblCost;
        dblNet = _dblNet;
        strPrivacy = _strPrivacy;
    }

    public string ProductCode
    {
        get
        {
            if (strPrivacy == "Public")
            {
                return strCode;
            }
            else
            {
                return "Product Private Can't release code";
            }
        }
    }

标签: c#listgetsetinstance

解决方案


假设我们有以下内容:

public class Test
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Amount { get; set; }

    private string _test = "Some constant value at this point";

    public string GetTest()
    {
        return _test;
    }

    public void SetTest()
    {
        //Nothing happens, you aren't allow to alter it. 
        //_test = "some constant 2";
    }
}


public class Program
{
    public static void Main(string[] args)
    {
        List<Test> listOfTest = new List<Test>()
        {
            new Test() {Id = 0, Name = "NumberOne", Amount = 1.0M},
            new Test() {Id = 1, Name = "NumberTwo", Amount = 2.0M}
        };

        Test target = listOfTest.First(x => x.Id == 0);

        Console.WriteLine(target.Name);

        target.Name = "NumberOneUpdated";

        Console.WriteLine(listOfTest.First(x => x.Id == 0).Name);

        Console.WriteLine(listOfTest.First(x => x.Id == 0).GetTest());//This will alsways be "Some constant value at this point";


        Console.ReadLine();
    }
}

从技术上讲,您可以完全取消 SetTest 方法。但是,我包含它是为了演示如果您想更改 _test 会是什么样子。

你不想创建一个类的新实例,你已经有了一个实例。您可以在需要的地方更改班级作者允许的班级。并在需要时保留该类参考。完成后,一旦程序找不到对您的对象(实例)的活动引用,该引用将被垃圾收集。


推荐阅读