2015-10-30 2 views
-1

У меня есть класс для моего устройства для приобретения. Затем я хочу создать еще один класс, который генерирует случайные выборки, когда мое устройство сбора данных не подключено.Общий объект для двух разных классов

Это мой объект:

private object AmplifierObj; 

И я хочу создать его как то

if (AmpSettingsObj.DaqDevice == "noAmp") 
    AmpObj = new NoAmpManager(sampleRate: sampleRate); 
else 
    AmpObj = new USBampManager(optCalibrationFlag: calibrationFlag, 
         serialNumbers: serialNumbers, sampleRate: sampleRate); 

Однако, когда я называю один из методов, которые я получаю сообщение об ошибке «объект» не содержит определение метода. Оба класса имеют точно такие же методы. Какой был бы лучший способ его реализации? Должен ли я использовать общий класс в качестве заполнителя?

ответ

1

Если оба класса имеют одинаковые методы, у вас должен быть интерфейс (IAmplifier), и оба класса должны реализовать этот интерфейс.

Это легко сделать, щелкнув правой кнопкой мыши один из классов и выбрав Refactor/Extract Interface.

Предполагая, что ваше имя интерфейса IAmplifier, оба класса реализуют одинаковый интерфейс, такие как:

public class NoAmpManager : IAmplifier 
{ 
    ... (Methods) 
    ... (Properties) 
} 

public class USBampManager : IAmplifier 
{ 
    ... (Methods) 
    ... (Properties) 
} 

Тогда вместо

private object AmplifierObj; 

Использование

private IAmplifier AmplifierObj; 
0

Вы можете сделать он вот так

public class AmplifierObj 
{ 
    public Object AnySameProperty { get; set; } 
} 

public class NoAmpManager: AmplifierObj 
{ 
    public void Foo() 
    { 

    } 
} 

public class USBampManager : AmplifierObj 
{ 
    public void Bar() 
    { 

    } 
} 

Но всегда необходимо вызвать свойство подклассов следует проверить тип объекта

AmplifierObj AmpObj; 
if (AmpSettingsObj.DaqDevice == "noAmp") 
    AmpObj = new NoAmpManager(sampleRate: sampleRate); 
else 
    AmpObj = new USBampManager(optCalibrationFlag: calibrationFlag, 
         serialNumbers: serialNumbers, sampleRate: sampleRate); 


if (AmpObj.GetType() == typeof(NoAmpManager)) 
    ((NoAmpManager)AmpObj).Foo(); 
else 
    ((USBampManager)AmpObj).Bar(); 
Смежные вопросы