gpt4 book ai didi

asp.net-mvc-2 - .net中所有接口(interface)的基是什么,就像所有类的基是对象一样

转载 作者:行者123 更新时间:2023-12-02 00:39:03 25 4
gpt4 key购买 nike

我想将一个接口(interface)传递给一个以Object为参数的方法签名,所以我想知道这个问题

public Stream GetViewStream(string viewName, object model, ControllerContext context)
  1. 我想传递一个接口(interface) Imodel 而不是对象,而不修改签名。接口(interface)有基类吗?

  2. 还有在新的 mvc2 中有没有办法完全避免 controllercontext?

最佳答案

我只回答第一个问题 - 为什么所有接口(interface)都没有通用的基础接口(interface)?

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

让我们假设,您可以为系统中的所有接口(interface)设置一个通用接口(interface)。这意味着,所有接口(interface)都需要强制其实现为该公共(public)基础接口(interface)提供实现细节。通常,接口(interface)用于为其具体实现类赋予特定的特殊行为。显然,当您只知道要做什么而不知道如何做时,您只想定义一个接口(interface)。所以,如果你让所有接口(interface)都有一个通用的基础接口(interface),并强制实现期望它们提供如何做的细节——你为什么要这样做?每个类(class)应完成的共同任务有哪些各不相同?

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

There's possibly no assumption of any system-wide interface method which is virtual/abstract to all its implementations.

使用接口(interface)的一种常见做法是,为任何类型定义特定行为。就像我有一个 IFlyable 接口(interface),它将 Fly() 提供给所有实现 IFlyable 的类型。这样我就可以使用任何 Flyable 对象,而不管它的继承层次结构如何。我可以写一个这样的方法..

public void FlyTheObject(IFlyable flyingObject)
{
flyginObject.Fly();
}

除了 Fly() 方法的实现之外,它不要求对象提供任何东西。

编辑

此外,所有接口(interface)都将解析为对象,因为无法实例化接口(interface)。该对象始终属于可以实例化的具体类。此类可能实现也可能不实现您的接口(interface),但正如我们所知,任何 .Net 类型最终都基于 System.Object,因此无论事实如何,您都可以将实例转换为对象类型它是否实现了特定的接口(interface)。

关于asp.net-mvc-2 - .net中所有接口(interface)的基是什么,就像所有类的基是对象一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3422973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com