【问题标题】:How can I call a method which has Interface as one of the parameter in C#?如何在 C# 中调用具有接口作为参数之一的方法?
【发布时间】:2014-01-10 05:30:38
【问题描述】:

我有以下方法(我的 dll 中实现了第 3 方 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);
}

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

【问题讨论】:

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


    【解决方案1】:

    只需创建一个实现此接口的类

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

    创建它的实例并将其传递给方法

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

    【讨论】:

    • 优秀!!!非常感谢@Ondrej Janacek ..!我仍处于学习模式,所以请不要介意我的基本问题..;-)
    • @aceventura 我真的不介意。每个人都必须从某个地方开始;)
    【解决方案2】:

    您可以传递实现该接口的任何类的对象。

    例如:

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

    【讨论】:

    • 感谢您回答我的问题@Sachin。抱歉,我已经投票了。
    【解决方案3】:

    您可以将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

    【讨论】:

    • 感谢您的回复@Kaf,对不起,我已经投票了。我会考虑您对 Ninject 的宝贵建议进行测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 2015-07-01
    • 2017-11-08
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多