如何将不同的属性应用于接口的成员,而不是父接口中相同成员的属性

时间:2009-10-22 07:08:15

标签: c# interface attributes

想象一下这样的接口层次结构:

public interface IAnimal
{
    string Color { get; }
}


public interface ICat : IAnimal
{
}

在这种情况下,ICat'继承'IAnimal的Color属性。

是否可以在ICat的Color属性中添加属性,而无需将其添加到IAnimal?

以下是我想要实现的示例,但给出了编译器警告:

public interface IAnimal
{
    string Color { get; }
}


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

2 个答案:

答案 0 :(得分:1)

这可以在C#4.0 beta 2中为我编译。它会发出警告,提示“新”关键字可能是有保证的。

同样对于好奇,这让我感到有趣:http://blogs.msdn.com/ericlippert/archive/2009/09/14/what-s-the-difference-between-a-partial-method-and-a-partial-class.aspx

答案 1 :(得分:1)

我认为你得到的警告是

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;
    }
}