2016-01-27 2 views
2

Прочитал весь день о интерфейсах и абстрактных классах, пытаясь понять их, чтобы лучше понять библиотеку amazon, с которой я работаю. У меня есть этот код:Понимание интерфейсов C#

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 быть в дальнейшем используется для хранения информации, что амазонки отправляет обратно после вызова метода вызывается. Но каково значение для установки переменной типа интерфейса на нуль?

Кроме того, интерфейс может реализовать другой интерфейс? Это не только классы, которые могут реализовывать интерфейсы, но и сами интерфейсы?

+1

Что это означает, что это означает, что переменная равна нулю? Это не отличается от любой другой переменной, которая имеет значение null; это означает, что на самом деле это не указывает на что-либо. Что вы не понимаете по этому поводу? – Servy

+0

Какой смысл устанавливать тип переменной для интерфейса? Я понимаю установку переменной в строку или int или другой тип данных, но когда мне нужно установить переменную в тип интерфейса. –

+3

Похоже, вам нужно потратить некоторое время на чтение интро-книги программирования или что-то подобное. Это выходит за рамки вопроса SO. – Servy

ответ

2

Pproperties может присутствовать в интерфейсах, поскольку свойства на самом деле являются методами - использование T GetSomeValue() рядом с void SetSomeValue(T value) стало настолько распространенным на других языках, что C# реализует эти свойства.

Значения за установив элемент интерфейса в null то же самый, как установка anyother свойства null - так set аксессор свойства является методом, это как вызов любого другого метода на интерфейсе. Что такое null означает, что до реализации.

Интерфейсы не реализуют друг друга, так как и интерфейс не может содержать код и, следовательно, не реализуется; Наследование интерфейса позволяет требовать один интерфейс в другом. Большой пример: IEnumerable<T>, который так тесно связан с IEnumerable, что он наследует, что означает, что любой класс, реализующий IEnumerable<T>, должен также реализовать IEnumerable.

1

Интерфейс подобен договорному соглашению. Наследуя интерфейс от класса, вы говорите: «Я согласен реализовать все методы, определенные в этом интерфейсе». Так что если у вас есть интерфейс, как это:

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() {...} 
} 

вы не должны установить переменную типа интерфейса в нуль, если у вас есть власть, чтобы сделать это. Самое замечательное в интерфейсах заключается в том, что вы можете установить переменную типа интерфейса, на что-либо, что «наследует» этот интерфейс.

Смежные вопросы