Как я могу вынудить все производные классы реализовать абстрактный метод или свойство?

Для пользователей ПК:

Шаг 1:
Вы должны включить опции разработчика в своем телефоне Android.
Вы можете включить опции разработчика, используя этот способ.
• Откройте «Настройки»> «О программе»> «Информация о программном обеспечении»> «Еще».
• Затем нажмите «Номер сборки» семь раз, чтобы включить параметры разработчика.
• Вернитесь в меню «Настройки», и теперь вы сможете увидеть «Опции разработчика» там.
• Коснитесь его и включите USB-отладку из меню на следующем экране.

Шаг 2:

Откройте cmd и введите adb.
если вы обнаружите, что adb является недопустимой командой, вам нужно добавить путь к переменной среды.

• Сначала перейдите к папке с установленным SDK
Следуйте по этому пути, и этот путь только для примера. D: \ программное обеспечение \ Development \ Andoird \ SDK \ SDK \ платформенные инструменты \; D: \ softwares \ Development \ Andoird \ SDK \ sdk \ tools;
• Теперь поиск в расширенной настройке системы Windows

enter image description here

Откройте переменную окружения.

enter image description here

, затем откройте путь и вставьте следующий путь, это пример.
Ваш путь SDK отличается от моего, пожалуйста, используйте ваш. D: \ softwares \ Development \ Andoird \ SDK \ sdk \ platform-tools \;
D: \ softwares \ Development \ Andoird \ SDK \ sdk \ tools;

] enter image description here

Шаг 3:

Откройте cmd и введите adb. если вы по-прежнему видите, что команда adb является недопустимой, значит, ваш путь не установлен должным образом, выполните указанные выше шаги.

enter image description here

Теперь вы можете подключить ваш телефон к ПК.

Откройте cmd и введите adb devices, и вы увидите свое устройство. Найдите свой IP-адрес телефона.

enter image description here

Тип: - adb tcpip 5555

enter image description here

] Получить IP-адрес вашего телефона

adb shell netcfg

Теперь,

adb connect "IP address of your phone"

Теперь запустите ваш проект Android и, если вы не видите свое устройство, введите снова adb connect IP address вашего телефона

enter image description here

enter image description here

Для пользователей Linux и MAC :

Шаг 1: откройте терминал и установите adb, используя

sudo apt-get install android-tools-adb android-tools-fastboot

Подключите телефон через USB кабель к ПК. Введите следующую команду в терминале

adb tcpip 5555

Используя adb, подключите свой IP-адрес телефона Android.

Уберите свой телефон.

7
задан Hans Malherbe 16 July 2009 в 15:34
поделиться

4 ответа

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

12
ответ дан 6 December 2019 в 14:07
поделиться

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

Если вы не имеют какой-либо функциональности в методе Concrete.Clone (), тогда вы также можете сделать свой класс Concrete абстрактным (только не забудьте изменить имя ;-). Оставьте любую ссылку на метод Clone ().

abstract class Base { protected abstract void Clone(); }
abstract class Concrete : Base { }
class Custom : Concrete { protected override void Clone() { /* do something */ } }

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

abstract class Base { protected abstract void Clone(); }

abstract class ConcreteForDatabases : Base 
{ 
    protected abstract string CopyInsertStatemement {get;}

    protected override void Clone()
    {
        // setup db connection & command objects
        string sql = CopyInsertStatemement;
        // process the statement
        // clean up db objects
    }
}

class CustomBusinessThingy : ConcreteForDatabases 
{
    protected override string CopyInsertStatemement {get{return "insert myTable(...) select ... from myTable where ...";}}
}
3
ответ дан 6 December 2019 в 14:07
поделиться

You will have to make Concrete an abstract class to enforce that.

2
ответ дан 6 December 2019 в 14:07
поделиться

You can check this at run-time using reflection and throw an exception to disrupt execution, wrecking havoc for "impolite" users of your library. Performance-wise that is not very wise, even though you could store a static HashSet in the base abstract class with all verified types.

I think your best bet is to provide clear documentation that tells any user of your code that it is deemed necessary to override the Clone() method.

0
ответ дан 6 December 2019 в 14:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: