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

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


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

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

Хотелось бы понять почему там нельзя, а тут можно?
...
Рейтинг: 0 / 0
09.01.2014, 11:03
    #38520249
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматические свойства {get; set;}
Там показан контракт класса, а не описание его свойств.
...
Рейтинг: 0 / 0
09.01.2014, 11:04
    #38520250
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматические свойства {get; set;}
Во-первых, данные свойства приходят из интерфейса _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
09.01.2014, 11:24
    #38520278
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматические свойства {get; set;}
Сдаётся мне, что во времена написания класса Exception автоствойств не было даже в планах. :-)
...
Рейтинг: 0 / 0
09.01.2014, 11:38
    #38520296
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматические свойства {get; set;}
Алексей КСдаётся мне, что во времена написания класса Exception автоствойств не было даже в планах. :-)
Хорошо подмечено :)
...
Рейтинг: 0 / 0
18.03.2014, 21:30
    #38589975
stut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматические свойства {get; set;}
Что значат такие поля в энтити фреймворк: Bankid {get;set;}. Гетеры и сетеры как бы должны идти со словом abstract. Здесь этого нету. Как вообще потом эти гет и сет реализируются, то есть каково их значение. Что если например одно из двух не включить. Будет просто ошибка компилятора ибо это такая конвенция?
...
Рейтинг: 0 / 0
18.03.2014, 23:09
    #38590007
VideoSharp.info
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
автоматические свойства {get; set;}
stutЧто значат такие поля в энтити фреймворк: Bankid {get;set;}. Гетеры и сетеры как бы должны идти со словом abstract. Здесь этого нету. Как вообще потом эти гет и сет реализируются, то есть каково их значение. Что если например одно из двух не включить. Будет просто ошибка компилятора ибо это такая конвенция?

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

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


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