C# 抽象类、接口、容器和方法的问题

C# 抽象类、接口、容器和方法的问题,c#,interface,ioc-container,abstract-class,C#,Interface,Ioc Container,Abstract Class,我有下面的场景 我有一个接口 public interface ImyInterface { void myInterfaceMethod(string param); } 我有一个抽象类 public abstract class myAbstractClass { public myAbstractClass() { //something valid for each inherited class } public void my

我有下面的场景

我有一个接口

public interface ImyInterface
{
    void myInterfaceMethod(string param);
}
我有一个抽象类

public abstract class myAbstractClass
{
    public myAbstractClass()
    {
       //something valid for each inherited class
    }

    public void myAbstractMethod<T>(T param)
    {
      //something with T param
    }
}
最后,我有一个类,我将在其中创建一个ImyInterface对象。此时我将调用myAbstractMethod,但是

public class myFinalClass
{
    public void myFinalMethod()
    {
       ImyInterface myObj = _myContainer<ImyInterface>();

       myObj.???

    }
}
公共类myFinalClass
{
公共无效myFinalMethod()
{
ImyInterface myObj=_myContainer();
myObj。???
}
}
显然没有这个方法,因为它没有声明到接口中。 我的解决方案如下

public interface ImyInterface
{
   void myInterfaceMethod(string param);
   void myFakeMethod<T>(T param);
}

public class myClass : myAbstractClass, ImyInterface
{
   public myClass():base()
   {}

   public void ThisMethodWillNeverCall()
   {
      // nothing to do
   }

   //--- a fake method
   public void myFakeMethod<T>(T param)
   {
         base.myAbstractMethod<T>(param);
   }                    
 }
公共接口ImyInterface
{
void myInterfaceMethod(字符串参数);
void-myFakeMethod(T参数);
}
公共类myClass:myAbstractClass,ImyInterface
{
public myClass():base()
{}
public void this methodwillnevercall()
{
//无事可做
}
//---假方法
公共无效myFakeMethod(T参数)
{
base.myAbstractMethod(param);
}                    
}
还有比我的更好的解决办法吗


谢谢大家!

首先,您的命名约定很混乱。仔细阅读微软所做的努力

根据你的例子也很难说出你想要实现什么

回到你的问题:

您应该仅访问一个接口才能使用该接口。不要试图用类/接口制作任何神奇的东西来让它们协同工作。这通常意味着类不应该尝试实现接口


最好创建一个新接口,该接口具有您想要的特性,并让您的类实现这两个特性。

首先,您的命名约定很混乱。仔细阅读微软所做的努力

根据你的例子也很难说出你想要实现什么

回到你的问题:

您应该仅访问一个接口才能使用该接口。不要试图用类/接口制作任何神奇的东西来让它们协同工作。这通常意味着类不应该尝试实现接口


最好创建一个新接口,该接口具有您想要的功能,并让您的类实现这两个功能。

为什么您认为这是一个问题?如果使用接口的代码需要该方法,则该方法应该是接口的一部分。如果您正在使用接口,则显然需要在接口上声明这些方法。放弃接口,使用抽象类。请注意,
void myAbstractMethod()
不是抽象的。这会分散读者的注意力,使读者感到困惑。杰森:这不是一个真正的问题,但也许有比我更好的解决方案吗?为什么你认为这是一个问题?如果使用接口的代码需要该方法,则该方法应该是接口的一部分。如果您正在使用接口,则显然需要在接口上声明这些方法。放弃接口,使用抽象类。请注意,
void myAbstractMethod()
不是抽象的。这会分散读者的注意力,使读者感到困惑。杰森:这不是一个真正的问题,但也许有比我更好的解决方案。这是一个例子,我试着写得尽可能简单。谢谢你,我会按照你的建议创建一个新的界面。这是一个例子,我试着写得尽可能简单。谢谢,我将按照您的建议创建一个新界面。
public interface ImyInterface
{
   void myInterfaceMethod(string param);
   void myFakeMethod<T>(T param);
}

public class myClass : myAbstractClass, ImyInterface
{
   public myClass():base()
   {}

   public void ThisMethodWillNeverCall()
   {
      // nothing to do
   }

   //--- a fake method
   public void myFakeMethod<T>(T param)
   {
         base.myAbstractMethod<T>(param);
   }                    
 }