Статический метод, общий для всех типов реализации - PullRequest
0 голосов
/ 28 апреля 2011

В c # как можно определить статический метод, который должен быть реализован всеми производными / реализующими типами? Я знаю, что вы не можете определить статический метод в интерфейсе.

Основная посылка такая:

Скажем, например, у меня есть базовый класс Организм. Производные типы будут Человек и Собака.

Мне нужен метод, который может вернуть мне число ног, которое имеет данный организм. Значит, Человека будет 2, собаки будет 4 и т. Д.

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

Ответы [ 3 ]

6 голосов
/ 28 апреля 2011

Не думаю, что вы полностью понимаете ОО. Имеет смысл сделать его методом экземпляра.

Что бы произошло, если бы у вас было 2 собаки (одну по кличке «повезло»), и удачливую машину сбила машина, теряющая ногу? С вашей моделью весь вид собак просто потерял ногу?

Но в лучшей модели:

#psudo 
class Organism{
   public abstract void legs(){ return 0;}
}
class Dog : Organism{
   private int _legs;
   public int legs(){ return _legs; }
}

тогда счастливчик просто потеряет ногу.


0 голосов
/ 28 апреля 2011

Как то так.

abstract class Organism
{
    public abstract int NumberOfLegs();
}

abstract class Biped : Organism
{
    public sealed override int NumberOfLegs()
    {
        return 2;
    }
}


abstract class Quadroped : Organism
{
    public sealed override int NumberOfLegs()
    {
        return 4;
    }
}

class Humand : Biped
{

}



class Dog : Quadroped
{

}

Но я бы беспокоился об использовании такой таксономии и еще больше беспокоился о выпечке при таких предположениях. Тем не менее, одна хорошая вещь в статически типизированных языках состоит в том, что когда вам нужно пересмотреть неверное предположение, это заставляет вас смотреть на весь код, основанный на этом предположении ... это хорошо.

0 голосов
/ 28 апреля 2011

Сделайте это методом экземпляра.Используя наследование, ваши производные классы должны реализовывать свои собственные версии, которые возвращают соответствующие значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...