Как применить другой атрибут интерфейса к элементу интерфейса, чем тот же элемент в родительском интерфейсе - PullRequest
1 голос
/ 22 октября 2009

Представьте себе иерархию интерфейса, подобную этой:

public interface IAnimal
{
    string Color { get; }
}


public interface ICat : IAnimal
{
}

В этом случае ICat «наследует» свойство Color цвета IAnimal.

Можно ли добавить атрибут в свойство Color ICat, не добавляя его в IAnimal?

Ниже приведен пример того, чего я пытаюсь достичь, но выдается предупреждение компилятора:

public interface IAnimal
{
    string Color { get; }
}


public interface ICat : IAnimal
{
    [MyProperty]
    string Color { get; }
}

Ответы [ 2 ]

1 голос
/ 22 октября 2009

Я предполагаю, что вы получаете предупреждение

warning CS0108: 'ICat.Color' hides inherited member 'IAnimal.Color'. Use the new keyword if hiding was intended.

Чего вы пытаетесь достичь, применяя этот атрибут?
Если вы хотите избежать этого предупреждения, вы можете сделать что-то вроде следующего:

public class MyPropertyAttribute : Attribute { }

public interface IAnimal {
    string Color { get; }
}

public abstract class Cat : IAnimal {
    [MyProperty]
    public string Color {
        get { return CatColor; }
    }
    protected abstract string CatColor {
        get;
    }
}
1 голос
/ 22 октября 2009

Это компилируется для меня в C # 4.0 beta 2. Это дает предупреждение, что ключевое слово 'new' может быть оправдано.

Также для любопытных это показалось мне интересным: http://blogs.msdn.com/ericlippert/archive/2009/09/14/what-s-the-difference-between-a-partial-method-and-a-partial-class.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...