Здравствуйте, Aen Sidhe, Вы писали:
AS>Красиво У меня другой вариант. Т.е. у меня Field1 используется из не-obsolete кода.
Способ есть, но это баг в компиляторе:
using System;
class D
{
static void Main()
{
var z = new A {Field1 = 2};
}
}
public class A
{
[Obsolete("This member is obsolete", true)]
public int Field1;
}
public class A
{
[Obsolete("This member is obsolete", true)]
public int Field1;
}
Задача: написать компилирующийся код с использованием Field1.
Запрещается: манипулировать атрибутом Obsolete — это должен быть стандартный атрибут из BCL.
Здравствуйте, Aen Sidhe, Вы писали:
AS>Доброго времени суток.
AS>Вроде бы не было, но легко.
AS>
AS> public class A
AS> {
AS> [Obsolete("This member is obsolete", true)]
AS> public int Field1;
AS> }
AS>
AS>Задача: написать компилирующийся код с использованием Field1. AS>Запрещается: манипулировать атрибутом Obsolete — это должен быть стандартный атрибут из BCL.
[Obsolete("This class is obsolete", true)]
public class B
{
public int Field2 = new A().Field1;
}
Здравствуйте, Aen Sidhe, Вы писали:
AS>Доброго времени суток.
AS>Вроде бы не было, но легко.
AS>
AS> public class A
AS> {
AS> [Obsolete("This member is obsolete", true)]
AS> public int Field1;
AS> }
AS>
AS>Задача: написать компилирующийся код с использованием Field1. AS>Запрещается: манипулировать атрибутом Obsolete — это должен быть стандартный атрибут из BCL.
Здравствуйте, Aen Sidhe, Вы писали:
AS>Не совсем. Тут проверка в рантайм уходит из-за dynamic.
Ну собственно проект компилится, не падает при работе (то есть эксепшенов никаких нет при записи значения 500 в Field1) и свойство Field1 используется. Что и требовалось
Ладно, раз не подходит, будем дальше думать. С dynamic действительно очень уж просто получается.
Здравствуйте, nikov, Вы писали:
N>Здравствуйте, Aen Sidhe, Вы писали:
AS>>Красиво У меня другой вариант. Т.е. у меня Field1 используется из не-obsolete кода.
N>Способ есть, но это баг в компиляторе:
Да, именно этот вариант. Самое интересное, что со свойствами работает хорошо.