Класс реализует свойство в интерфейсе, тип которого относится к другому интерфейсу. снизу код, как я должен установить значения для `Property2`,` Property3` - PullRequest
0 голосов
/ 25 ноября 2011

N пространство имен имеет 2 интерфейса IA ​​и IB.одно из свойств в возвратах IA типа IB

namespace N    
    {
        Interface IA
        {
            // Have a property Property1 which returns of type IB(interface type)
            IB Property1 { get; } 
        }

        interface IB
        {
            int Property2 { get; }
            int Property3 { get; }        
        }
    }

N2 - это другое пространство имен, в котором класс A реализует IA.мой код в этом классе должен возвращать значение Propert1 типа IB.должен ли мой класс реализовать IB также

   using N;
            namespace N2
            {
                class A : IA
                {
                    IB property1;
                    IB Property1 { get { return property1; } }
                }
            }

Ответы [ 4 ]

1 голос
/ 25 ноября 2011

Вы можете добавить установщик к реализации, даже если интерфейс не указывает его:

class A : AI
{
    BI property1;
    BI Propert1 { 
      get { return property1; } 
      set { property1 = value; }
    }
}

или

class A : AI
{
    BI Propert1 { get; set; }
}
0 голосов
/ 25 ноября 2011

Если вы хотите использовать интерфейс AI для возврата значений, возвращаемых свойствами в интерфейсе BI, то я думаю, что вам нужно пересмотреть свой дизайн.Я говорю это потому, что это плохая практика (в большинстве случаев), когда один объект обеспечивает доступ к элементам другого объекта напрямую, а не просто предоставляет доступ к другому объекту.

Однако, учитывая ваш пример кода, онне похоже, что вы пытаетесь это сделать (меня немного смущает сочетание вопроса и примера).Если вам просто интересно, как установить значения, возвращаемые свойствами интерфейса, то вам нужно либо предоставить некоторую функцию-установщик, либо инициализировать через конструктор класса.

Свойство Setter

Измените свойства на: int Property2 {get;задавать;}

Метод установки

Добавление метода установки в интерфейс или класс: public void SetProperty2 (int value) {}

Конструктор

Добавить конструктор к классу, который реализует интерфейс BI (предположительно B):

public class B : BI
{
    private int mProperty2;

    public B(int property2)
    {
        mProperty2 = property2;
    }

    public int Property2
    {
        get { return mProperty2; }
    }
}
0 голосов
/ 25 ноября 2011

Вам нужна реализация BI.

using N; 
namespace N2 {     
    class A : AI     
    {         

         BI Property1 
         { 
              get 
              { 
                   return new B(){Property1 = 5,Property2=100 };
              } 
         }     
    } 


    class B : BI
    {
         int Property1 {get;set;}
         int Property2 {get;set;}
    }
} 
0 голосов
/ 25 ноября 2011

Вам необходимо реализовать свой интерфейс BI, а затем вы можете использовать этот класс для Property1.

using N;
namespace N2
{
    class A : AI
    {
        BI property1;
        BI Property1 { get { return property1; } }

        public A() 
        {
            property1 = new B();
        }
    }

    class B : BI
    {
        int Property2 { get { return 2; } }
        int Property3 { get { return 3; } }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...