一整天都在阅读接口和抽象类,试图了解它们,以便更好地理解我正在使用的amazon库。我有这样的代码:
using MWSClientCsRuntime;
namespace MarketplaceWebServiceOrders.Model
{
public interface IMWSResponse : IMwsObject
{
ResponseHeaderMetadata ResponseHeaderMetadata { get; set; }
}和
namespace MWSClientCsRuntime
{
public interface IMwsObject
{
void ReadFragmentFrom(IMwsReader r);
string ToXML();
string ToXMLFragment();
void WriteFragmentTo(IMwsWriter w);
void WriteTo(IMwsWriter w);
}
}我的第一个问题是,我认为接口不能包含字段,但是它们可以包含属性usch作为ResponseHeaderMetadata?
第二,在我的主程序中,我有这一行代码:
IMWSResponse response = null;稍后使用response来存储在调用方法调用后亚马逊发送回来的信息。,但是将接口类型的变量设置为null的意义是什么?
另外,一个接口可以实现另一个接口吗?不仅类可以实现接口,而且接口本身也可以实现。
发布于 2016-01-27 21:08:05
Pproperties可以出现在接口中,因为属性实际上是方法--在其他语言中,T GetSomeValue()与void SetSomeValue(T value)一起使用变得如此普遍,以至于C#将这些作为属性来实现。
将接口成员设置为null的含义与将任何其他属性设置为null相同--因为属性的set访问器是方法,这就像调用接口上的任何其他方法一样。null的意思是哪里取决于实现。
接口不相互实现,因为和接口不能包含代码,因此没有实现;接口继承允许一个接口在另一个接口中。一个很大的例子是IEnumerable,它与IEnumerable联系得如此紧密,以至于它继承了它,这意味着实现IEnumerable<T>的任何类也必须实现IEnumerable。
发布于 2016-01-27 21:20:58
接口就像一个契约协议。通过继承类中的接口,您可以说,“我同意实现该接口中定义的所有方法”。所以如果你有这样的界面:
public interface IWorker {
void DoWork();
}你用这样的界面:
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 )
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,尽管您有能力这样做。接口的伟大之处在于,您可以将接口类型的变量设置为任何“继承”该接口的变量。
https://stackoverflow.com/questions/35047855
复制相似问题