1

я следующий метод (третья сторона метод SDK реализуется в моей библиотеке DLL):Как я могу вызвать метод, который имеет интерфейс как один из параметров в C#?

public void PlaceItem(myItemData item, IRequest request) 
{ 
    var item = (ItemClassData)item; //**myItemData is the base class for ItemClassData** 
    item.Id = 101; 
    request.Succeeded(item.Id); 
} 

Параметр интерфейс, как показано ниже:

public interface IRequest 
{ 
    void Failed(string Error); 
    void Succeeded(string ItemId); 
} 

Я хочу, чтобы вызвать этот метод из функции. Я знаю, как передать объект в качестве первого параметра при вызове этого метода. Но как передать второй параметр (Интерфейс). Любая помощь очень ценится.

ответ

5

Просто создать класс, который реализует этот интерфейс, как

public class MyClass : IRequest 
{ 
    public void Failed(string Error) { // do something } 
    public void Succeeded(string ItemId) { // do something } 
} 

создать экземпляр этого и передать его методу

var inst = new MyClass();  
PlaceItem(..., inst); 
+0

Отлично !!! Спасибо tonn @Ondrej Janacek ..! Я все еще в режиме обучения, поэтому, пожалуйста, не обращайте внимания на мои основные вопросы .. ;-) – aceventura

+0

@aceventura Я действительно не против. Каждый должен начать где-то;) –

1

Вы можете передать объект любого класса, который реализует этот интерфейс.

, например:

public class MyClass : IRequest 
{ 
    // class definition and implementation of methods 
    void Failed (string Error) {}; 
    void Succeeded (string ItemId) {}; 
} 

Теперь вы можете передать объект MyClass в этом методе.

// create an instance of MyClass 
MyClass objMyClass = new MyClass(); 

// call the method 
PlaceItem(myDataItem, objMyClass); 
+0

Спасибо, что ответили на мой вопрос @Sachin. Извините, я уже голосовал. – aceventura

1

Вы можете передать любую реализацию IRequest в качестве второго параметр.

public class Request : IRequest 
{ 
    public void Failed(string Error) 
    { 
     //do something here 
    } 

    public void Succeeded(string ItemId); 
    { 
     //do something here 
    } 
} 

//Calling your method 
Request mySecondPara = new Request(); 

PlaceItem(item, mySecondPara) 

Также вы можете использовать контейнер МОК (Unity, Ninject), чтобы сделать работу. Это также известно как Dependency Injection.

+0

Спасибо за ваш ответ @Kaf, Извините, что я уже голосовал. Я рассмотрю ваше ценное предложение Ninject, чтобы проверить его. – aceventura

Смежные вопросы