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

C#如何对接口使用特定方法,c#,inheritance,interface,C#,Inheritance,Interface,我有两个类和一个接口: 程序,超级秘密网络和开门 我想做的是,每当我的类使用接口时,我希望该接口调用继承它的类的特定方法 我知道我可以只使用类超级机密网络,但这不是重点。我可能想继承另一个基类,但需要其他类的一部分(由其他接口使用) 代码示例: namespace Test { class Program: openDoor { static void Main(string[] args) { } } publi

我有两个类和一个接口:
程序
超级秘密网络
开门

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

我知道我可以只使用类
超级机密网络
,但这不是重点。我可能想继承另一个基类,但需要其他类的一部分(由其他接口使用)

代码示例:

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;
        }
    }
}
名称空间测试
{
课程名称:openDoor
{
静态void Main(字符串[]参数)
{
}
}
公共接口openDoor
{
bool open();
}
公共类超机密网络:openDoor
{
/// 
///我只希望在使用接口时使用此方法
/// 
/// 
公开课
{
//这里有一些自定义逻辑
返回true;
}
}
}

如果不将类转换为接口,就无法阻止某人对类调用方法

例如:

public interface IDoesSomething
{
    void DoSomething();
}

public class DoerOfStuff : IDoesSomething

    void DoSomething()
    {
        // whatever
    }
}
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) { }
}

您无法阻止某人对
doeroftuff
的实例调用
DoSomething
。这个类有这个方法,所以有人可以调用它

您可以让一个类实现多个接口,并根据方法应该看到的接口强制转换一个类

例如:

public interface IDoesSomething
{
    void DoSomething();
}

public class DoerOfStuff : IDoesSomething

    void DoSomething()
    {
        // whatever
    }
}
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
的一个实例传递给该方法,但它将仅被“视”为
IFryCook
的一个实例。该方法不知道该类还实现了其他方法


重新考虑是否要使用类继承也是一件好事。听起来这已经给你的问题增加了一些困难。如果在类
A
中有您想要在类
B
中使用的功能,那么从
A
继承通常会造成困难。类
B
最好依赖于类
a
的单独实例。原则是“如果我们让类一起工作的方式是让它们彼此继承,那么我们就会陷入困境,因为迟早我们会想使用两个类的功能,而不能同时从它们继承。

接口不是这样工作的。如果你这样做,`openDoor obj=new superSecretWork();`并在
obj
上调用方法,它将从
superSecretWork
类调用方法。你为什么不自己做点什么,试着弄清楚会发生什么?类不是从接口继承的,它实现了接口。告诉我们接口“只包含方法、属性、事件或索引器的签名”。接口与实现无关。它们仅仅是数据传递合同。它们为实现它们的所有类定义所需的成员、属性等。调用方法或定义方法之类的东西完全超出了它们的范围。如果您在同一个示例中添加更多细节,就会更加清楚。假设有另一个类实现该接口。现在,如果在program.cs类的对象上调用接口方法,那么在program.cs中会发生什么?接口不调用其实现类的任何方法。添加更多的示例代码和细节将有助于更好地理解这个问题。
如何继承多个基类?
这不应该是原始帖子中提出的问题吗?这在Java和C等现代OO语言中是不可能的。您可以通过在一个类中实现两个接口并从该类继承另一个类来实现这一点,这样您就拥有了这两个接口的特性。