Перегрузка абстрактного метода - PullRequest
0 голосов
/ 30 октября 2010
Рассмотрим примерособый случай для премиум аккаунта)?Я использую абстрактный шаблон фабрики в этом дизайне ... спасибо ...

Ответы [ 4 ]

2 голосов
/ 30 октября 2010

Вы можете определить IPremiumAccount интерфейс с обоими методами и реализовать его в классе PremiumAccount.Проверка того, реализует ли объект интерфейс, возможно, лучше, чем проверка конкретного базового класса.

public interface IPremiumAccount : IAccount
{
    public string GetAccountName(string id, string name);
}

public class PremiumAccount : IPremiumAccount
{

// ...

IAccount a = factory.GetAccount();
IPremiumAccount pa = a as IPremiumAccount;
if (pa != null)
    pa.GetAccountName("X1234", "John");
2 голосов
/ 30 октября 2010

Вы приведете ссылку на конкретный тип:

((PremiumAccount)a).GetAccountName("X1234", "John");
2 голосов
/ 30 октября 2010

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

1 голос
/ 30 октября 2010

Что ж, учитывая, что он определен только для типа PremiumAccount, единственный способ, которым вы можете назвать его, - это если a на самом деле PremiumAccount, верно? Итак, сначала приведите PremiumAccount:

IAccount a = new PremiumAccount();

PremiumAccount pa = a as PremiumAccount;
if (pa != null)
{
    pa.GetAccountName("X1234", "John");
}
else
{
    // You decide what to do here.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...