Списки C # - использовать ли снова методы класса (Get / Set и т. Д.), Когда данные находятся в списке? - PullRequest
0 голосов
/ 15 октября 2018

Быстрый вопрос по ООП.Я использую список вместе с классом и конструктором класса.Поэтому я использую конструктор класса для определения набора данных, а затем добавляю каждую запись в свой список по мере того, как пользователь их создает.

Мои вопросы, как только данные находятся в списке, и я говорю, что хочу что-то изменить, так этохорошая практика, чтобы найти запись, создать экземпляр, используя эту запись, а затем использовать мои методы класса, чтобы делать все, что нужно - и затем поместить его обратно в список?

Например, ниже у меня есть мой класс с конструктором.Допустим, я хочу, чтобы система выпускала strCode только в том случае, если для поля «Конфиденциальность» установлено значение public.Теперь, просто используя Экземпляры, я бы использовал, например, Console.WriteLine (whatproduct.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";
            }
        }
    }

1 Ответ

0 голосов
/ 15 октября 2018

Допустим, у нас есть следующее:

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.

Вы не хотите когда-либо создавать новый экземпляр класса, у вас уже есть экземпляр.Вы можете просто изменить класс, где это разрешено автором класса, где вам нужно.И сохраняйте ссылку на этот класс столько, сколько вам нужно.Когда вы закончите, ссылка будет собрана сборщиком мусора, как только программа не найдет активной ссылки на ваш объект (экземпляр).

...