как вызвать методы интерфейса, реализованного в классе? - PullRequest
0 голосов
/ 14 октября 2011

А у меня один интерфейс

 public  interface IMethod
 {
     String Add(string str);
     Boolean Update(string str);
     Boolean Delete(int id);
 }

Я объявил другой интерфейс, как это который имеет IMethod в качестве свойства.

public interface IFoo
{
     IMethod MethodCaller { get  ; set; }  
}

Теперь я реализовал интерфейс IFoo в своем классе и из которого я хочу вызвать метод IMethods.

Реализация класса

 public MyClass : IFoo
 { 
     public IMethod MethodCaller{ get  ; set; }  
 }

Как мне это сделать? как мне вызвать Добавить Обновить метод удаления из MyClass

MyClasses, которые реализуют IMethod следующим образом:

public class foo1:IMethod
{

         public String Add(string str){ return string.Empty;}

         Boolean Update(string str){//defination}

         Boolean Delete(int id){ //defination}
}

public class foo2:IMethod
{

         public String Add(string str){ return string.Empty;}

         Boolean Update(string str){//defination}

         Boolean Delete(int id){ //defination}
}

Ответы [ 4 ]

1 голос
/ 14 октября 2011

Внутри класса:

public MyClass : IFoo   
{
   public void CallAllMethodsOfIIMethodImpl()
   {
       if (this.MethodCaller != null)
       {
          this.MethodCaller.Add( ... );
          this.MethodCaller.Delete( ... );
          this.MethodCaller.Update( ... );
       }
   }
}

Снаружи:

MyClass instance = new MyClass();
if (instance.MethodCaller != null)
{
   instance.MethodCaller.Add( ... );
   instance.MethodCaller.Delete( ... );
   instance.MethodCaller.Update( ... );
}
1 голос
/ 14 октября 2011

Вы еще не определили ни одного конкретного класса, который реализует IMethod - вы только определили свойство , которое имеет тип IMethod - теперь вам нужно назначить конкретный класс этому свойству так, Вы можете вызвать методы на нем. Сделав это, вы можете просто вызвать методы в свойстве MethodCaller:

string result = MethodCaller.Add(someFoo);
0 голосов
/ 14 октября 2011

Вы должны создать внутренний класс, который implements IMethod взаимодействует.

public MyClass : IFoo
 { 
   private TestClass _inst;
   public IMethod MethodCaller
   { 
     get 
        {
         if(_inst==null)
           _inst=new TestClass();
         return _inst;
        }
      set 
        {
          _inst=value;
         }  
    }
   public class TestClass : IMethod
   {
     public String Add(string str) {}
     public Boolean Update(string str) {}
     public Boolean Delete(int id) {}
   }
 }

Методы вызова:

MyClass instance=new MyClass();
instance.MethodCaller.Add(..);

ИЛИ

 IMethod call=new MyClass().MethodCaller;
 call.Add(..);
0 голосов
/ 14 октября 2011

Учитывая, что myClass является экземпляром MyClass, а MethodCaller настроен на конкретную реализацию, вы можете вызывать такие методы:

myClass.MethodCaller.Add(...);
myClass.MethodCaller.Update(...);
myClass.MethodCaller.Delete(...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...