Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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#,我有两节课。类A和类B。它们都继承自抽象类。两个类中都有一个方法具有完全相同的代码,我正在尝试将其移动到抽象类 类中的方法如下所示: public void updateResult(OutputA output) { var Class c = new Class C(); var result = c.process(); output.result = result; } 类似地,该方法位于类B中,带有一个OutputB参数。属性结果在类A和B中很常见 Out

我有两节课。类A和类B。它们都继承自抽象类。两个类中都有一个方法具有完全相同的代码,我正在尝试将其移动到抽象类

类中的方法如下所示:

public void updateResult(OutputA output)
{

    var Class c = new Class C();
    var result = c.process();

    output.result = result;
}
类似地,该方法位于类B中,带有一个OutputB参数。属性结果在类A和B中很常见

OutputA和OutputB两种类型都派生自基类型输出

当我将方法移动到抽象类并使用参数类型作为输出时,编译器无法识别result属性


解决此问题的更好方法是什么,以便将方法移动到抽象类,并可由类a和类B使用。

您需要将输出参数强制转换为适当的类型OutputA或OutputB。如果您发布代码,那么我可以看到强制转换需要在哪里进行。

确保
OutputA
OutputB
类的
result
属性在
Output
类中定义并为public,然后将
updateResult
的参数类型设置为
Output
(正如您在问题中所讨论的).

您可以创建一个公开
result
属性的接口,并在
OutputA
OutputB
类中实现它,然后您可以将参数作为接口类型传递。

听起来result属性不在输出基类中,所以您需要重构它!使用了抽象类作为一种泛化形式,但您需要在实现中使用显式的具体类型,请参见我的答案。