我有2个类和一个接口:
Program
,superSecretWork
和openDoor
。
我想要做的是,每当我的类使用接口时,我希望该接口调用继承它的类的特定方法。
我知道我可以使用班级superSecretWork
,但这不是重点。我可能想继承另一个基类,但需要其他类的一部分(由其他接口使用)。
代码示例:
namespace Test
{
class Program: openDoor
{
static void Main(string[] args)
{
}
}
public interface openDoor
{
bool open();
}
public class superSecretWork : openDoor
{
/// <summary>
/// I only want this method to be used when using the interface
/// </summary>
/// <returns></returns>
public bool open()
{
//some custom logic here
return true;
}
}
}
答案 0 :(得分:0)
您无法阻止某人在某个类上调用方法而不将其作为接口强制转换。
例如:
public interface IDoesSomething
{
void DoSomething();
}
public class DoerOfStuff : IDoesSomething
void DoSomething()
{
// whatever
}
}
您无法阻止某人在DoSomething
的实例上调用DoerOfStuff
。该类有这种方法,所以有人可以调用它。
你可以做的是让一个类实现多个接口,并根据方法应该看到的接口强制转换类。
例如:
public interface IFryCook
{
void Fry(FrenchFries fries);
}
public interface IGrillCook
{
void Grill(Burger burger);
}
public class FastFoodCook : IFryCook, IGrillCook
{
public void Fry(FrenchFries fries) { }
public void Grill(Burger burger) { }
}
如果你这样做:
public void ProcessFrenchFryOrder(IFryCook frycook)
您可以将FastFoodCook
的实例传递给该方法,但它只会被&#34;看到&#34;作为IFryCook
的一个实例。该方法不知道该类还实现了其他方法。
重新考虑是否要使用类继承也很好。听起来这已经给你的问题增加了一些难度。如果您在课程A
中拥有所需的课程B
,则继承A
通常会造成困难。类B
依赖于类A
的单独实例会更好。原则是&#34; favor composition over inheritance。&#34;如果我们让类一起工作的方式是让它们相互继承,那么我们就把自己画成一个角落,因为我们迟早会想要使用两个类的功能而我们不能继承它们两者。