Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对于从接口派生的类,返回类型比对象更好_C# - Fatal编程技术网

C# 对于从接口派生的类,返回类型比对象更好

C# 对于从接口派生的类,返回类型比对象更好,c#,C#,我有一个带有IDataProcessor类型变量的类 class MyClass { IDataProcessor _processor; ... } public interface IDataProcessor { object Process(int a, int b); } 以及一些实现 class IntDataProcessor : IDataProcessor { public object Process(int a, int b) {

我有一个带有
IDataProcessor
类型变量的类

class MyClass
{
    IDataProcessor _processor;
    ...
}

public interface IDataProcessor
{
    object Process(int a, int b);
}
以及一些实现

class IntDataProcessor : IDataProcessor
{
    public object Process(int a, int b)
    {
        return (int) (a + b);
    }
}

class DoubleDataProcessor : IDataProcessor
{
    public object Process(int a, int b)
    {
        return (double) (a + b);
    }
}
有没有办法避免使用
对象
返回类型

p.S.
过程
方法的实际功能比我在这里介绍的更复杂。例如,
DoubleDataProcessor
实际上将两个整数转换为一个double。

泛型

将您的界面更改为:

public interface IDataProcessor<T>
{
    T Process(T a, T b);
}
公共接口IDataProcessor
{
T过程(ta,tb);
}
然后,其他两位对此进行了讨论:

class IntDataProcessor : IDataProcessor<int>
{
    public int Process(int a, int b)
    {
        return a + b;
    }
}

class DoubleDataProcessor : IDataProcessor<double>
{
    public double Process(double a, double b)
    {
        return a + b;
    }
}
类IntDataProcessor:IDataProcessor
{
公共整数进程(整数a、整数b)
{
返回a+b;
}
}
类DoubleDataProcessor:IDataProcessor
{
公共双流程(双a、双b)
{
返回a+b;
}
}

那么,您应该返回什么(可能是另一个接口)取决于该接口的用途,您根本没有详细说明。
对象
返回类型有什么问题?这在这里很有意义。到目前为止,这类操作似乎不需要包装器接口,它们是特定的,转换器类更合适,如果您确实需要它是泛型的,而不是AntP所指出的,您可以在“converter/processor”类中返回接口。@RohitVats它有一种误用策略模式的奇怪气味。另外,
过程
是在一个大数组上迭代的,因此可能会有一些额外的装箱/拆箱开销。在没有更多上下文的情况下,什么使您认为泛型是合适的?另一个强类型接口可能就可以了。这在我看来很难看。但是作为主类中的
IDataProcessor
类型变量应该声明什么呢?@lejon,不管你需要它是什么。你想问什么?使用泛型,你实际上是在创建多个接口,只需要更少的编写。这在这里可能适用,也可能不适用。在问题编辑:NOT.@AntP之后,将从另一个参数知道类型。泛型的问题是我不能有一个被实例化为
ConcreteDataProcessor
IDataProcessor