首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解接口C#

理解接口C#
EN

Stack Overflow用户
提问于 2016-01-27 20:58:15
回答 2查看 265关注 0票数 2

一整天都在阅读接口和抽象类,试图了解它们,以便更好地理解我正在使用的amazon库。我有这样的代码:

代码语言:javascript
复制
using MWSClientCsRuntime;

namespace MarketplaceWebServiceOrders.Model
{
    public interface IMWSResponse : IMwsObject
    {
        ResponseHeaderMetadata ResponseHeaderMetadata { get; set; }
    }

代码语言:javascript
复制
namespace MWSClientCsRuntime
{
    public interface IMwsObject
    {
        void ReadFragmentFrom(IMwsReader r);
        string ToXML();
        string ToXMLFragment();
        void WriteFragmentTo(IMwsWriter w);
        void WriteTo(IMwsWriter w);
    }
}

我的第一个问题是,我认为接口不能包含字段,但是它们可以包含属性usch作为ResponseHeaderMetadata

第二,在我的主程序中,我有这一行代码:

代码语言:javascript
复制
IMWSResponse response = null;

稍后使用response来存储在调用方法调用后亚马逊发送回来的信息。,但是将接口类型的变量设置为null的意义是什么?

另外,一个接口可以实现另一个接口吗?不仅类可以实现接口,而且接口本身也可以实现。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-27 21:08:05

Pproperties可以出现在接口中,因为属性实际上是方法--在其他语言中,T GetSomeValue()void SetSomeValue(T value)一起使用变得如此普遍,以至于C#将这些作为属性来实现。

将接口成员设置为null的含义与将任何其他属性设置为null相同--因为属性的set访问器是方法,这就像调用接口上的任何其他方法一样。null的意思是哪里取决于实现。

接口不相互实现,因为和接口不能包含代码,因此没有实现;接口继承允许一个接口在另一个接口中。一个很大的例子是IEnumerable,它与IEnumerable联系得如此紧密,以至于它继承了它,这意味着实现IEnumerable<T>的任何类也必须实现IEnumerable

票数 2
EN

Stack Overflow用户

发布于 2016-01-27 21:20:58

接口就像一个契约协议。通过继承类中的接口,您可以说,“我同意实现该接口中定义的所有方法”。所以如果你有这样的界面:

代码语言:javascript
复制
public interface IWorker    {
    void DoWork();
}

你用这样的界面:

代码语言:javascript
复制
public class Employee : IWorker
{
    // you are forced to implement this method
    void DoWork {}
}

public class Contractor: IWorker
{
    // you are forced to implement this method
    void DoWork {}
}

通过其他接口的“继承”接口,您只是同意在其他接口中实现任何方法,比如(从MSDN )

代码语言:javascript
复制
interface IBase
{
   void F();
}
interface IDerived: IBase
{
   void G();
}
class C: IDerived
{
   void IBase.F() {...}
   void IDerived.G() {...}
}
class D: C, IDerived
{
   public void F() {...}
   public void G() {...}
}

您不必将接口类型的变量设置为null,尽管您有能力这样做。接口的伟大之处在于,您可以将接口类型的变量设置为任何“继承”该接口的变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35047855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档