powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / автоматические свойства {get; set;}
7 сообщений из 7, страница 1 из 1
автоматические свойства {get; set;}
    #38520236
ftr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ftr
Гость
Добрый день!

Читаю Э.Троелсена C# и .NET 4.0 и возник следующий вопрос:
на 220 стр. написано что создавать автоматические свойства только для чтения или для записи нельзя. т.е. код:
Код: c#
1.
public int MyReadOnlyProp {get;}


не скомпилируется.

Проверил - действительно, выдает ошибку.
Однако, на 268 стр. приводится код базового класса System.Exception, где используются эти самые автоматические свойства только для чтения.

Хотелось бы понять почему там нельзя, а тут можно?
...
Рейтинг: 0 / 0
автоматические свойства {get; set;}
    #38520249
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там показан контракт класса, а не описание его свойств.
...
Рейтинг: 0 / 0
автоматические свойства {get; set;}
    #38520250
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, данные свойства приходят из интерфейса _Exception, который "поддерживает" неполные автосвойства (в виду отсутствия реализации).

_Exception
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
[InterfaceType(ComInterfaceType.InterfaceIsDual), CLSCompliant(false), ComVisible(true), Guid("b36b5c63-42ef-38bc-a07e-0b34c98f164a")]
public interface _Exception
{
    string ToString();
    bool Equals(object obj);
    int GetHashCode();
    Type GetType();
    string Message { get; }
    Exception GetBaseException();
    string StackTrace { get; }
    string HelpLink { get; set; }
    string Source { get; set; }
    [SecurityCritical]
    void GetObjectData(SerializationInfo info, StreamingContext context);
    Exception InnerException { get; }
    MethodBase TargetSite { get; }
}



Во-вторых, Exception таки реализует свои свойства. Например,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
[__DynamicallyInvokable]
public virtual string Message
{
    [__DynamicallyInvokable]
    get
    {
        if (this._message != null)
        {
            return this._message;
        }
        if (this._className == null)
        {
            this._className = this.GetClassName();
        }
        
        return Environment.GetRuntimeResourceString("Exception_WasThrown", new object[] { this._className });
    }
}



Вывод: ты видишь не реализацию класса, а метаданные .
...
Рейтинг: 0 / 0
автоматические свойства {get; set;}
    #38520278
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сдаётся мне, что во времена написания класса Exception автоствойств не было даже в планах. :-)
...
Рейтинг: 0 / 0
автоматические свойства {get; set;}
    #38520296
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КСдаётся мне, что во времена написания класса Exception автоствойств не было даже в планах. :-)
Хорошо подмечено :)
...
Рейтинг: 0 / 0
автоматические свойства {get; set;}
    #38589975
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значат такие поля в энтити фреймворк: Bankid {get;set;}. Гетеры и сетеры как бы должны идти со словом abstract. Здесь этого нету. Как вообще потом эти гет и сет реализируются, то есть каково их значение. Что если например одно из двух не включить. Будет просто ошибка компилятора ибо это такая конвенция?
...
Рейтинг: 0 / 0
автоматические свойства {get; set;}
    #38590007
VideoSharp.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stutЧто значат такие поля в энтити фреймворк: Bankid {get;set;}. Гетеры и сетеры как бы должны идти со словом abstract. Здесь этого нету. Как вообще потом эти гет и сет реализируются, то есть каково их значение. Что если например одно из двух не включить. Будет просто ошибка компилятора ибо это такая конвенция?

По условиям автоматических свойств должны быть включены и get и set, иначе не скомпелируется, однако в нужных случаях можно ограничить доступ к свойству, например: public Bankid {get; privet set;}
В итоге свойство как обычная переменная, однако на получение значения она в данном случае паблик, а на присвоение - приватная!

Есть одно условие - у свойства не должен быть доступ больше, чем у самой переменной. Если, все таки, так сделать, программа скомпилируется, но доступ свойства ограничится доступом к переменной!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / автоматические свойства {get; set;}
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]