Не выполняется конструктор при upcast C#
Создайте класс Printer, там создайте метод void Print(string value), который выводит на экран значение аргумента.
Реализуйте возможность того, чтобы в случае наследования от данного класса других классов, и вызове
соответствующего метода их экземпляра, строки, переданные в качестве аргументов методов, выводились
разными цветами. Обязательно используйте приведение типов!
Вот мой код :
namespace Task1
{
class Printer
{
public void Print(string value)
{
Console.WriteLine(value);
}
}
class Company : Printer
{
public Company()
{
Console.ForegroundColor = ConsoleColor.Green;
}
}
class Position : Company
{
public Position()
{
Console.ForegroundColor = ConsoleColor.Blue;
}
}
class NamePerson : Position
{
public NamePerson()
{
Console.ForegroundColor = ConsoleColor.Red;
}
}
class Program
{
static void Main(string[] args)
{
NamePerson name = new NamePerson();
name.Print("Elon");
Position company = (Position)name;
company.Print("Tesla, SpaceX");
Company position = (Company)company;
position.Print("Head");
}
}
}
Проблема: когда делаю upcast то не меняется цвет текста выводящийся на консоль как указано в конструкторе, как сделать так, чтобы когда делал upcast то и менялся цвет текста? Думал через конструктор, но не работает.
Ответы (1 шт):
Конструктор выполняется при создании экземпляра определенного типа, к кастам он никакого отношения не имеет.
Ваше задание очень простое
namespace Task1
{
class Printer
{
public virtual void Print(string value)
{
Console.WriteLine(value);
}
}
class Company : Printer
{
public override void Print(string value)
{
Console.ForegroundColor = ConsoleColor.Green;
base.Print(value);
}
}
class Position : Printer
{
public override void Print(string value)
{
Console.ForegroundColor = ConsoleColor.Blue;
base.Print(value);
}
}
class NamePerson : Printer
{
public override void Print(string value)
{
Console.ForegroundColor = ConsoleColor.Red;
base.Print(value);
}
}
class Program
{
static void Main(string[] args)
{
Printer name = new NamePerson();
name.Print("Elon");
Printer company = new Company();
company.Print("Tesla, SpaceX");
Printer position = new Position();
position.Print("Head");
}
}
}
Ну или так можно
class Printer
{
protected ConsoleColor color = Console.ForegroundColor;
public void Print(string value)
{
Console.ForegroundColor = color;
Console.WriteLine(value);
}
}
class Company : Printer
{
public Company()
{
color = ConsoleColor.Green;
}
}
class Position : Printer
{
public Position()
{
color = ConsoleColor.Blue;
}
}
class NamePerson : Printer
{
public NamePerson()
{
color = ConsoleColor.Red;
}
}