C# Для чего нужен private get;?

private set; - убедился - не можем установить в др. классе вот так: obj.x = 1 -- нельзя.

Но private get; не знаю, как легко выяснить, зачем нужен :

компилирование вот такого кода:

using System;

class P 
{
    public int x { private get; set; }
}

class Program
{
    
    static void Main()
    {
 
 		Console.Clear();

        P obj = new P();
        
        Console.WriteLine( obj.x = 1 );
 
        Console.ReadKey();
    }
}


даёт строку "1" на выводе. Спасибо : )
  • Вопрос задан
  • 590 просмотров
Решения вопроса 2
private get нужен для ограничения доступа свойства которое возращает значение. Т.е. получить значение свойства мы можем только внутри класса или структуры. А в вашем коде происходит следующее:

Так как в функцию WriteLine(int value) мы передаем значимый тип
Ссылка на MSDN
Передавая в метод переменную типа значения, вы передаете ему копию этой переменной.

Следовательно операция будет выглядеть так :
Console.WriteLine(int value = obj.x = 1); (т.е. выполниться множественное присвоение сразу нескольким переменным). В итоге в консоль вы выводите значение переменной value, а не obj.x

Соответственно код:
Console.WriteLine(int value = obj.x); не будет компилироваться, т.к. obj.x имеет приватный уровень доступа get.
Ответ написан
Комментировать
@rtsharpross
get не только даёт возможность получить данные но и модифицировать их

private a = "Hello";

private string b
{
get { return $"{a} world"; }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mindtester
@mindtester Куратор тега C#
https://youtu.be/UtO6HIp1908?list=RDUtO6HIp1908
1 - https://docs.microsoft.com/ru-ru/dotnet/csharp/lan...
2 - по логике, ваш код или не должен работать, или есть нюансы... если будет время - проверю
читайте (внимательно) ошибки компиляции (да вообще все внимательно)
using System;

namespace private_get
{
    class P
    {
        public int x { private get; private set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.Clear();

            P obj = new P();

            Console.WriteLine(obj.x = 1);

            //Console.ReadKey();
            // ну или запускать в студии Ctrl+F5
            // и стоит изучить что есть что?
            // и в чем разница ;))
        }
    }
}

чуть не забыл WI280VW.png
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы