C#如何使用带接口的特定方法

时间:2017-06-03 15:23:07

标签: c# inheritance interface

我有2个类和一个接口: ProgramsuperSecretWorkopenDoor

我想要做的是,每当我的类使用接口时,我希望该接口调用继承它的类的特定方法。

我知道我可以使用班级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;
        }
    }
}

1 个答案:

答案 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;如果我们让类一起工作的方式是让它们相互继承,那么我们就把自己画成一个角落,因为我们迟早会想要使用两个类的功能而我们不能继承它们两者。

相关问题