Я унаследовал большую базу кода, и я пытаюсь внедрить некоторые новые функции в структуру. В принципе, для того, чтобы сделать это «правильным» способом, мне пришлось бы модифицировать всю структуру структуры. так как я не тот парень, который разработал фреймворк, и я не читаю читателя, так что, вероятно, этого не произойдет (хотя мне действительно очень хотелось бы переделать все с нуля сам).Наследование родового в C#
Так что, чтобы делать то, что я хочу, я пытаюсь реализовать образец декоратора. This answer from maliger предполагает, что то, что я делаю ниже, совершенно верно. Однако моно, похоже, не нравится; он жалуется, что T
не может быть получена, когда я объявляю HappyDecorator
Пожалуйста, простите чрезмерно упрощенный пример, но он перевернет точку.
public class HappyObject
{
public virtual void print()
{
Console.WriteLine ("I'm happy");
}
}
public class VeryHappyObject : HappyObject
{
public override void print()
{
Console.WriteLine ("I'm very happy");
}
public void LeapForJoy()
{
Console.WriteLine("Leaping For Joy!");
}
}
public class SuperHappyObject : VeryHappyObject
{
public override void print()
{
Console.WriteLine ("I'm super happy!");
}
public void DieOfLaughter()
{
Console.WriteLine("Me Dead!");
}
}
public class HappyDecorator<T> : T where T : HappyObject
{
public string SpecialFactor { get; set; }
public void printMe()
{
Console.WriteLine (SpecialFactor);
print();
}
}
class MainClass
{
public static void Main (string[] args)
{
HappyDecorator<HappyObject> obj = new HappyDecorator<HappyObject>();
obj.SpecialFactor = Console.ReadLine();
obj.printMe();
}
}
Вы получаете ошибку? Или как он не ведет себя так, как ожидалось? – mason
Это не способ следовать образцу декоратора. obj obect должен получить HappyDecorator в своем конструкторе. –
Вы не можете наследовать параметр родового типа, и это именно то, что сообщение об ошибке говорит для вашего образца кода. Какую часть этого вы не понимаете? – MarcinJuraszek