Понять функцию из метода get set - PullRequest
0 голосов
/ 23 октября 2019

Я использую метод get set для зацикливания другого метода. Как показано ниже, я пытаюсь увеличить значение Table10_3 в классе ValuesForTableLooping. В методе Main я вызвал свойство get set для увеличения значения на единицу.

У меня есть 2 вопроса под рукой,

  1. Можно ли вызвать метод get setметод без указания его как Inc.Val = 0;?
  2. Почему изменение любого значения в Inc.Val = 0; не влияет на результат?
class Class2
{
    public class ValuesForTableLooping
    {
        public static int Table10_3 = 1;
    }

    public static void Main()
    {
        Console.WriteLine(ValuesForTableLooping.Table10_3);

        Increase Inc = new Increase();
        Inc.Val = 0;
        Console.WriteLine(ValuesForTableLooping.Table10_3);
        Inc.Val = 0;
        Console.WriteLine(ValuesForTableLooping.Table10_3);
        Inc.Val = 0;
        Console.WriteLine(ValuesForTableLooping.Table10_3);
    }

    public class Increase
    {
        private int val;
        public int Val
        {
            get { return val; }
            set { val = ValuesForTableLooping.Table10_3++; }
        }
    }
}

Большое спасибо еще раз!

1 Ответ

2 голосов
/ 23 октября 2019

Ваш дизайн довольно странный, и вы, похоже, очень плохо понимаете, что такое свойства.

Свойство - это ничто, как вы заметили, как метод get и метод set. Таким образом, вы можете достичь того же самого с помощью следующего кода:

public int get_Val() { return val; }
public void set_Val(int value) { val = ValuesForTableLooping.Table10_3++; }

И вот странная вещь. Сеттер ожидает новое значение для вашей собственности, которое предоставляется как value. Однако вы не используете это значение в своей реализации. Вместо этого вы просто увеличиваете val на единицу, что я бы назвал действительно странным дизайном. Вы либо хотите установить новое значение извне с помощью этого:

public void set_Val(int value) { val = value; }

или в нотации свойства:

public int Val { 
    get { return val; }
    set { val = value; }
}

, которая может быть дополнительно упрощена с помощью автоматически реализуемогосвойство:

public int Val { get; set; }

Другой - ИМХО лучше - способ полностью опустить установщик и создать вместо него IncreaseVal -метод:

public void IncreaseVal() { ValuesForTableLooping.Table10_3++; }

Последний, но не менее важный Increase isочень плохое имя для класса. Он не описывает вещь , но что-то, что вы можете сделать с вещью .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...