我已经阅读了很多有关标记界面不好的东西(或没有,看起来不太清楚)。
我不太了解“标记属性”的工作原理,并且创建了一个小示例来说明我的问题:
我有一个定义<httpRuntime requestValidationMode="2.0" targetFramework="4.6" />
的接口,另一个有定义Robot
的接口。事实证明,它存在一个类Ninja
,可以将内容相乘,但只能在Foo
和Robot
都得到某人的帮助下进行。
Ninja
据我了解,IRobotNinja是标记类:它没有成员。
如何获得相同的信息(尤其是在编译时确保仅using System;
public class Program
{
public static void Main()
{
IRobotNinja robotNinja = new RobotNinjaAlways10();
Foo foo = new Foo();
Console.WriteLine(foo.Multiply(1, 1, robotNinja));
}
}
public class Foo
{
public int Multiply(int leftOperand, int rightOperand, IRobotNinja robotNinja)
{
return leftOperand * rightOperand * robotNinja.availableShuriken * robotNinja.batteryLevel;
}
}
public interface IRobot
{
int batteryLevel
{
get;
}
}
public interface INinja
{
int availableShuriken
{
get;
}
}
public interface IRobotNinja : IRobot, INinja
{
}
public class RobotNinjaAlways10 : IRobotNinja
{
public int batteryLevel
{
get
{
return 10;
}
}
public int availableShuriken
{
get
{
return 10;
}
}
}
/ Robot
会帮助Ninja
?
答案 0 :(得分:4)
为避免创建另一个接口,可以使Multiply
与constraints通用:
public class Foo
{
public int Multiply<T>(int leftOperand, int rightOperand, T robotNinja)
where T : IRobot, INinja
{
return leftOperand * rightOperand * robotNinja.availableShuriken
* robotNinja.batteryLevel;
}
}