Действительно ли возможно обнаружить контекст класса в наследованном статическом методе?

Существует возможность, что так или иначе у Вас есть строка non-unicode с unicode символами ESC, например:

>>> print repr(text)
'I don\\u2018t like this'

Это на самом деле произошло со мной однажды. Можно использовать unicode_escape кодек, чтобы декодировать строку к unicode и затем закодировать его к любому формату, который Вы хотите:

>>> uni = text.decode('unicode_escape')
>>> print type(uni)
<type 'unicode'>
>>> print uni.encode('utf-8')
I don‘t like this
6
задан Shaul says I Support Monica 9 September 2009 в 15:10
поделиться

3 ответа

Вы можете сделать класс Animal универсальным.

class Animal<T> where T : Animal<T>
{
    public static T Create()
    {
        // Don't know what you'll be able to do here
    }
}

class Dog : Animal<Dog>
{

}

Но как класс Animal знает, как создавать экземпляры производных типов?

10
ответ дан 8 December 2019 в 18:39
поделиться

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

1
ответ дан 8 December 2019 в 18:39
поделиться

Я бы сделал абстрактный класс Animal с помощью статического метода Create; это фактически отправная точка для завода. На самом деле, похоже, что вы отменяете фабричный класс.

Если вы добавите абстрактный метод Initialize в класс Animal, метод Create станет следующим:

public static T Create<T>() where T : Animal {
  T animal = new T();   //may need a "new" in the declaration
  animal.Initialize();  //or Create or whatever or you put this logic
                        //   in the constructor and don't call this at all.
  return animal;
}
2
ответ дан 8 December 2019 в 18:39
поделиться
Другие вопросы по тегам:

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