2010-08-21 4 views
1

Возможные Дубликаты:
Abstract classes vs Interfaces
Interface vs Base classКогда использовать абстрактные классы и когда использовать интерфейсы в C#

Привет,

В C#, когда мы должны использовать интерфейсы и когда мы должны использовать абстрактные классы? Просьба пояснить на примере

+3

@BlaXpiri t: Вопрос о том, следует ли объявлять переменные в начале метода или в месте первого использования, доказывает, что Java является плохим клоном C++? Ваш комментарий бессмысленно провокационный, без каких-либо доказательств того, что ваш основной пункт или ваш бекас на C# являются «плохими». –

+0

@Bla Привет, я получил ответ от ваших рекомендуемых вопросов. Технически я могу понять разницу, и когда я использую абстрактный класс, я повторно использую код базового класса в своих производных классах. Но почему мне нужно написать интерфейс и реализовать его? В любом случае, я буду определять методы только в классе, реализующем интерфейс hte. Поэтому, если два класса реализуют интерфейс, который я пишу, и определяет метод в интерфейсе, я смогу использовать классы и методы даже если я не правильно напишу интерфейс? Итак, какое преимущество я получу при использовании интерфейсов? – SARAVAN

+0

Моя голова начала болеть, когда я читал предыдущий комментарий. Поэтому я дам вам полезную ссылку, содержащую множество других ссылок, которые причиняют вам боль: http://duckduckgo.com/?q=interface+vs+abstract+class –

ответ

0

использовать интерфейсы, если это не так, когда вы описываете контракт и абстрактные классы, когда вы используете функциональные возможности, которые будут использоваться для классов классов.

Для примеров использования может быть template pattern и Strategy pattern

+0

Технически я могу понять разницу, и когда я используйте абстрактный класс. Я повторно использую код базового класса в моих производных классах. Но почему мне нужно написать интерфейс и реализовать его. В любом случае, я буду определять методы только в классе, который его реализует. Поэтому, если два класса реализуют интерфейс, который я пишу, и определяет метод в интерфейсах, я смогу использовать классы и методы, даже если я не буду писать интерфейс правильно? Итак, какое преимущество я получу при использовании интерфейсов? – SARAVAN

4

Абстрактный класс, если вы хотите реализовать основные функциональные возможности и некоторые свойства/методы, которые должны быть перезаписаны реализатором:

public abstract class Entity 
{ 
    public int Id { get; set;} 

    public bool IsNew { get { return Id == 0; } } 

    public abstract DoSomething(int id); // must be implemented by concrete class 
} 

интерфейс, если вы должны определить, какие свойства/методы должен содержать класс, без каких-либо функций:

public interface IRepository 
{ 
    object Get(int id); 
    IEnumerable<object> GetAll(); 
} 
+0

Хм ... ты бы сделал так? См. Принятый ответ на http://stackoverflow.com/questions/2705163/c-abstract-classes-need-to-implement-interfaces. –

+0

это не удовлетворяет требованиям пользователя ..... –

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