Как я могу использовать член родительского класса для удовлетворения интерфейса в C #? - PullRequest
1 голос
/ 13 января 2011

У меня следующая ситуация:

public interface IStuffer
{
    public string Foo { get; }
}

public class BaseClass
{
    public static string Foo { get { ... } }
}

public class MyClass : BaseClass, IStuffer
{
}

Это не будет построено, потому что MyClass нужен член Foo. Как я могу использовать реализацию Foo BaseClass, чтобы удовлетворить требования MyClass для Foo?

Ответы [ 4 ]

11 голосов
/ 13 января 2011

Это потому, что Foo является статическим членом BaseClass. Просто убери статическое ключевое слово!

public class BaseClass
{
    public string Foo { get { ... } }
}

Редактировать : Иначе, если вы действительно хотите, чтобы оно оставалось статичным, вы можете использовать явную реализацию

public class MyClass : BaseClass, IStuffer
{
    string IStuffer.Foo { get { return BaseClass.Foo; } }
}
1 голос
/ 13 января 2011

Проблема в том, что ваш интерфейс ожидает нестатическую "строку Foo", если вы сделаете Foo Non-Static в BaseClass, тогда он удовлетворит ваш интерфейс :)

Удачи

0 голосов
/ 13 января 2011

Двумя способами:

1. Переименуйте Foo во что-то другое и добавьте метод Foo следующим образом:

public class BaseClass
{
 public static string FormerlyCalledFoo { get { ... } }
 public string Foo { get { ... } }
}

2. Если вам абсолютно необходимо иметь статическое свойство Foo, то вы можете реализовать интерфейс IStuffer как явную реализацию интерфейса, например:

public class BaseClass : IStuffer
{
 public static string Foo { get { ... } }
 string IStuffer.Foo { get { ... } }
}

Если вы используете последний метод, то вы должны знать, что вы должныприведение экземпляров BaseClass к IStuffer для доступа к свойству IStuffer.Foo

0 голосов
/ 13 января 2011

Интерфейсы не могут поддерживать статические свойства или методы.Если у вас есть интерфейс, все методы этого интерфейса должны быть экземпляром, а не областью класса.

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