LINUX.ORG.RU

если коротко, хочу чтобы базовый класс содержал абстрактное свойство доступное только для чтения. а производный позволял уже и менять его. что-то я понять не могу, зачем нужны эти свойства, если всякие virtual да abstract нельзя отдельно для get и set выставить.

RedPossum ★★★★★
() автор топика
Ответ на: комментарий от bk_

с методами всё понятно. владельцу мопеда сильно хочется свойств. а мне просто интересно стало.

RedPossum ★★★★★
() автор топика
Ответ на: комментарий от RedPossum

если коротко

Если вкратце - свойства = синтаксахар для сеттера-геттера.

На всякий случай проникаемся: http://msdn.microsoft.com/en-us/library/bzwdh01d(v=vs.71).aspx

Для странного все же следуем спецификации. Ну и здравому смыслу:

using System;

public abstract class A {
   public abstract int P { get; }
}
public sealed class B: A {
   private int x = 0;
   public override int P { get { return x + 1; } }
   public SetP(int p) {x=p;}
}

public static class Entry {
  public static void Main() {
    B obj = new B();
    obj.setP(10);
    Console.WriteLine(obj.P);
  }
}

У меня, конечно, есть в запасе ход конем (сделать странное), но вы его не потянете, боюсь.

yaws
()
Ответ на: комментарий от yaws

>У меня, конечно, есть в запасе ход конем (сделать странное), но вы его не потянете, боюсь.

ты давай показывай коня, а мы сами разберёмся, тянуть его, или не тянуть.

RedPossum ★★★★★
() автор топика

ok.
Ход конем - использовать SRE + IL. Неплохой пример подобного использования - Castle.DynamicProxy.

yaws
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.