Нужно объяснение о моем коде интерфейса - PullRequest
2 голосов
/ 17 ноября 2011

Может ли кто-нибудь объяснить приведенный ниже код, может ли кто-нибудь дать объяснение в реальном времени с помощью приведенных ниже фрагментов кода

public interface roman
{
    roman this[string name] { get; }
}

public class notempty : roman
{
    public string Color{ get; set; }

    public roman this[string name]
    {
        get { return new notempty() { Color= "Value1" }; }
    }
}

Ответы [ 2 ]

3 голосов
/ 17 ноября 2011
public interface roman // there is an interface called "roman", accessible to all
{
    // all implementations of "roman" must have an "indexer" that takes a string
    // and returns another "roman" instance (it is not required to offer a "set")
    // typical usage:
    //     roman obj = ...
    //     roman anotherObj = obj["abc"];
    roman this[string name] { get; }
}

public class notempty : roman // there is a class "notempty", accessible to all,
{                             // which implements the "roman" interface

    // no constructors are declared, so there is a default public parameterless
    // constructor which simply calls the parameterless base-constructor

    // any instance of "notempty" has a string property called "Color" which can
    // be both read (get) and written (set) by any callers; there
    // is also a *field* for this, but the compiler is handling that for us
    public string Color{ get; set; }

    // there is an indexer that takes a string and returns a "roman"; since
    // there is no *explicit* implementation, this will also be used to satisfy
    // the "roman" indexer, aka "implicit interface implementation"
    public roman this[string name]
    {
        // when the indexer is invoked, the string parameter is disregarded; a
        // new "notempty" instance is created via the parameterless constructor,
        // and the "Color" property is assigned the string "Value1"; this is then
        // returned as "roman", which it is known to implement
        get { return new notempty() { Color= "Value1" }; }
    }
}
2 голосов
/ 17 ноября 2011

Inferface roman определяет, что все реализации должны иметь индексатор this [string name] , который возвращает экземпляр roman.

Checkout:

Учебное пособие по C # Station - интерфейсы

и

Учебное пособие по C # Station - индексаторы

надеюсь, это поможет

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