Получить экземпляр уровня класса переменной (не Interface) - PullRequest
0 голосов
/ 28 января 2010

Если у меня следующий сценарий

public interface IFace
{
     int NoseSize {get; set;}
}


public class Face: IFace
{
    private int NoseSize;

    public int IFace.NoseSize
    {
        get { return ClassLevel.NoseSize}
        set { ClassLevel.NoseSize = value}
    }
}

Как на самом деле указать "ClassLevel"?

Ответы [ 4 ]

7 голосов
/ 28 января 2010

Просто обратитесь к нему как NoseSize или this.NoseSize, если хотите.


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

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

3 голосов
/ 28 января 2010

Вы можете смягчить конфликт имен, переименовав:

private int NoseSize;

до:

private int noseSize;

Я уверен, что это зависит от региона, компании и т. Д., Но я считаю, что использование camelCase является типичным для частных пользователей.

1 голос
/ 28 января 2010

Вы должны использовать нотацию InterfaceName.Member для ссылки на член, который реализован с использованием явной реализации интерфейса. Так что, если вы опустите IInterfaceName. частично это означает, что вы имеете в виду неявный реализованный член (член уровня класса, как вы его называете).

1 голос
/ 28 января 2010

рассматривают интерфейс как Контракт. Что вы делаете, так это говорите, что все, что является производным от вашего интерфейса (IFace), имеет гарантию наличия этих членов и / или методов. Это зависит от производного класса, чтобы фактически реализовать их. Еще одна вещь, которую он делает для вас, - это предоставление отношения «IsA» для классов, производных от интерфейса.

поочередно, вы могли бы сделать так ....

public class Face: IFace
{
    public int NoseSize
    {
        get;
        set;
    }

    public void foo()
    {
        this.NoseSize = 42;
        int someSize = this.NoseSize;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...