如何调用具有Interface作为C#参数之一的方法?

时间:2013-12-21 12:41:56

标签: c# methods interface parameter-passing interface-implementation

我有以下方法(在我的dll中实现第三方sdk方法):

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);
}

我想从函数中调用此方法。我知道如何在调用此方法时将对象作为第一个参数传递。但是如何传递第二个参数(Interface)。 非常感谢任何帮助。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);

答案 2 :(得分: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)

您也可以使用IOC容器(UnityNinject)来完成这项工作。这也称为Dependency Injection