.NET 4.x Как получить свойство класса? - C#
Формулировка задачи:
В продолжении темы визитора Есть, к примеру, вот такой код:
Как нужно реализовать код, чтобы не использовать приведение типов при получении и установке значения свойства?
public interface IAnimals { string Name { get; set; } } public class Dog : IAnimals { public string Name { get; set; } public bool Ears { get; set; } = true; } public class Cat : IAnimals { public string Name { get; set; } public bool Tail { get; set; } = false; } public class Squirel: IAnimals { public string Name { get; set; } }
var secondAnimal = new List<IAnimals>(){new Cat(), new Dog(), new Squirel()}; bool haveTail; foreach (IAnimals currentAnimal in secondAnimal) { if (currentAnimal is Cat) { haveTail = (currentAnimal as Cat).Tail; break; } if (currentAnimal is Dog) { (currentAnimal as Dog).Ears = true; } }
Решение задачи: «.NET 4.x Как получить свойство класса?»
textual
Листинг программы
public class Visitor { public dynamic GetPropValue { get; set; } public void Apply(Dog animal) { } public void Apply(Dog animal, string prpName) { } public void Apply(Cat animal) { } public void Apply(Cat animal, string prpName) { PropertyInfo propInfo = typeof(Cat).GetProperty(prpName); GetPropValue = propInfo.GetValue(animal, null); } public void Apply(Squirel animal) { } public void Apply(Squirel animal, string prpName) { } } public abstract class Animal { public string Name { get; set; } public abstract void Apply(Visitor visitor); public abstract void Apply(Visitor visitor, string prpName); } public class Dog : Animal { public Dog(string _name) { Name = _name; } public bool Ears { get; set; } = true; public override void Apply(Visitor visitor) { visitor.Apply(this); } public override void Apply(Visitor visitor, string prpName) { visitor.Apply(this, prpName); } } public class Cat : Animal { public Cat(string _name) { Name = _name; } public bool Tail { get; set; } = false; public override void Apply(Visitor visitor) { visitor.Apply(this); } public override void Apply(Visitor visitor, string prpName) { visitor.Apply(this, prpName); } } public class Squirel : Animal { public Squirel(string _name) { Name = _name; } public override void Apply(Visitor visitor) { visitor.Apply(this); } public override void Apply(Visitor visitor, string prpName) { visitor.Apply(this, prpName); } } class Program { static void Main(string[] args) { string catName = "Барсик"; var animals = new List<Animal>() {new Cat(catName), new Cat("Кузя"), new Dog(""), new Squirel("")}; var visitor = new Visitor(); foreach (Animal animal in animals) { if (animal.Name == catName) { animal.Apply(visitor, nameof(Cat.Tail)); var ee = visitor.GetPropValue; } Console.ReadLine(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д