Asp.net mvc 2 net中所有接口的基础是什么,就像所有类的基础是对象一样

Asp.net mvc 2 net中所有接口的基础是什么,就像所有类的基础是对象一样,asp.net-mvc-2,object,interface,Asp.net Mvc 2,Object,Interface,我想把一个接口传递给一个以对象为参数的方法签名,所以我想知道这个问题 public Stream GetViewStream(string viewName, object model, ControllerContext context) 我希望传递一个接口Imodel而不是object,而不修改签名。有接口的基类吗 在新的mvc2中,是否有一种方法可以完全避免controllercontext 不,接口没有基类。接口也没有基本接口 至于你的第二个问题(部分是第一个问题)-你实际上想做什么?

我想把一个接口传递给一个以对象为参数的方法签名,所以我想知道这个问题

public Stream GetViewStream(string viewName, object model, ControllerContext context)
  • 我希望传递一个接口Imodel而不是object,而不修改签名。有接口的基类吗

  • 在新的mvc2中,是否有一种方法可以完全避免controllercontext


  • 不,接口没有基类。接口也没有基本接口


    至于你的第二个问题(部分是第一个问题)-你实际上想做什么?

    接口没有基类,但你可以传递任何接口变量,例如:

     private IEnumerable<int> myInterfaceVariable = new List<int>();
    
    private IEnumerable myInterfaceVariable=新列表();
    
    因为根据定义,存储在该变量中的任何内容都必须是从接口继承的类的实例,因此它必须是对象

    以下内容很好:

    public class InterfaceAsObject
    {
        private IEnumerable<int> myInterfaceVariable = new List<int>();
    
        private void CallDoSomething()
        {
            DoSomething(myInterfaceVariable);
        }
    
        private void DoSomething(object input)
        {
    
    
        }
    }
    
    公共类接口对象
    {
    private IEnumerable myInterfaceVariable=新列表();
    私有void CallDoSomething()
    {
    剂量测定法(可评估);
    }
    私有void DoSomething(对象输入)
    {
    }
    }
    
    Re 1,没有基本接口,但如果我理解正确,您只需通过模型参数传递实现
    IModel
    的对象,然后将参数强制转换(并检查!)到IModel,就可以实现我认为您想要的。我使用'as'并检查null

    如果不需要完全的灵活性,更好的方法是定义模型参数必须支持的接口。如果特定对象支持派生接口(例如,
    IDerivedModel:IModel
    ),这也会起作用


    查阅一本关于多态性的教科书。

    我只想回答第一个问题——为什么没有适用于所有接口的公共基础接口

    首先,与System.Object情况不同,所有接口都没有通用的预定义基本接口。解释这一点会变得非常有趣

    假设系统中的所有接口都有一个公共接口。这意味着,所有接口都需要强制其实现为该公共基础接口提供实现细节。通常,接口用于为其具体实现类提供特定的特殊行为。显然,只有当您只知道要做什么而不知道如何做时,才需要定义一个接口。所以,如果您让所有接口都有一个公共的基本接口,并强制实现期望它们提供如何实现的细节,那么您为什么要这样做呢?每个班级应该做哪些不同的共同任务

    让我们看看硬币的另一面,为什么我们将System.object作为任何.Net类型的基类-很简单,它为您提供了一些对任何.Net类型都具有通用实现的方法,对于那些可能因类型而异的方法,它们使其成为虚拟的ex:.ToString()

    可能没有任何假设 系统范围的接口方法 虚拟/抽象到其所有 实现

    使用接口的一种常见做法是,定义任何类型的特定行为。就像我有一个接口iFlyTable,它将为实现iFlyTable的所有类型提供Fly()。这样,我就可以玩任何可飞行的对象,而不管它的继承层次进入图片。我可以写一个这样的方法

    public void FlyTheObject(IFlyable flyingObject)
    { 
        flyginObject.Fly();
    }
    
    除了Fly()方法的实现之外,它不需要对象的任何东西

    编辑
    此外,所有接口都将解析为对象,因为接口无法实例化。对象始终是可以实例化的具体类。这个类可以实现也可以不实现您的接口,但是我们知道,任何.Net类型最终都基于
    System.Object
    ,因此无论实例是否实现了特定接口,您都可以将其转换为对象类型。

    接口可以转换为对象,因此在该方法中我可以传递(对象)(接口),这是否意味着所有接口的基类也是对象。在框架库中,接口必须定义为类(猜测…)。我想获得一个控制器的钩子,但在mvc2中,controllercontext多次返回null(就我上次检查时所记得的情况而言),另一件事是,如果我想使用Icontroller,我无法绑定到特定的控制器,因为控制器是在运行时使用任何依赖项注入器确定的。我想知道接口是否只是编译器构造,或者在.net中的编码中是否有真正的定义,如果是这样,在上面的参数中,我可以通过将任何接口转换为对象来传递它,因为对象是最一般的作用域,我只是想知道是否在某个地方定义了所有接口也是对象?(以上方法以对象为参数),关于我的第二部分,我能摆脱controllercontext吗?感谢面不是对象——它们定义了一个对象实现该接口时所支持的“策略”。仅仅因为您可以将任何对象传递到该参数中,并不意味着您应该:-)。你有一种强类型语言——使用这一事实,不要到处依赖强制转换。您的代码将更易于维护和更健壮。我对问题2一无所知-抱歉。是的,我收集了接口不同的原因,但是在上面的参数中,我如何通过将任何接口转换为对象来传递它呢?因为对象是最一般的作用域,我只是想知道是否在某个地方定义了所有接口也是对象?当然,所有接口最终都会解析为对象???