.NET 4.x Как получить свойство класса? - C#

Узнай цену своей работы

Формулировка задачи:

В продолжении темы визитора Есть, к примеру, вот такой код:
Листинг программы
  1. public interface IAnimals
  2. {
  3. string Name { get; set; }
  4. }
  5. public class Dog : IAnimals
  6. {
  7. public string Name { get; set; }
  8. public bool Ears { get; set; } = true;
  9. }
  10. public class Cat : IAnimals
  11. {
  12. public string Name { get; set; }
  13. public bool Tail { get; set; } = false;
  14. }
  15. public class Squirel: IAnimals
  16. {
  17. public string Name { get; set; }
  18. }
Листинг программы
  1. var secondAnimal = new List<IAnimals>(){new Cat(), new Dog(), new Squirel()};
  2. bool haveTail;
  3. foreach (IAnimals currentAnimal in secondAnimal)
  4. {
  5. if (currentAnimal is Cat)
  6. {
  7. haveTail = (currentAnimal as Cat).Tail;
  8. break;
  9. }
  10. if (currentAnimal is Dog)
  11. {
  12. (currentAnimal as Dog).Ears = true;
  13. }
  14. }
Как нужно реализовать код, чтобы не использовать приведение типов при получении и установке значения свойства?

Решение задачи: «.NET 4.x Как получить свойство класса?»

textual
Листинг программы
  1. public class Visitor
  2.     {
  3.         public dynamic GetPropValue { get; set; }
  4.         public void Apply(Dog animal)
  5.         {
  6.         }
  7.  
  8.         public void Apply(Dog animal, string prpName)
  9.         {
  10.         }
  11.  
  12.         public void Apply(Cat animal)
  13.         {
  14.            
  15.         }
  16.  
  17.         public void Apply(Cat animal, string prpName)
  18.         {
  19.             PropertyInfo propInfo = typeof(Cat).GetProperty(prpName);
  20.             GetPropValue = propInfo.GetValue(animal, null);
  21.         }
  22.  
  23.         public void Apply(Squirel animal)
  24.         {
  25.         }
  26.  
  27.         public void Apply(Squirel animal, string prpName)
  28.         {
  29.         }
  30.     }
  31.  
  32.     public abstract class Animal
  33.     {
  34.         public string Name { get; set; }
  35.         public abstract void Apply(Visitor visitor);
  36.         public abstract void Apply(Visitor visitor, string prpName);
  37.  
  38.     }
  39.  
  40.     public class Dog : Animal
  41.     {
  42.         public Dog(string _name)
  43.         {
  44.             Name = _name;
  45.         }
  46.  
  47.         public bool Ears { get; set; } = true;
  48.  
  49.         public override void Apply(Visitor visitor)
  50.         {
  51.             visitor.Apply(this);
  52.         }
  53.  
  54.         public override void Apply(Visitor visitor, string prpName)
  55.         {
  56.             visitor.Apply(this, prpName);
  57.         }
  58.  
  59.     }
  60.  
  61.     public class Cat : Animal
  62.     {
  63.         public Cat(string _name)
  64.         {
  65.             Name = _name;
  66.         }
  67.  
  68.         public bool Tail { get; set; } = false;
  69.  
  70.         public override void Apply(Visitor visitor)
  71.         {
  72.             visitor.Apply(this);
  73.         }
  74.  
  75.         public override void Apply(Visitor visitor, string prpName)
  76.         {
  77.             visitor.Apply(this, prpName);
  78.         }
  79.  
  80.    }
  81.  
  82.     public class Squirel : Animal
  83.     {
  84.         public Squirel(string _name)
  85.         {
  86.             Name = _name;
  87.         }
  88.         public override void Apply(Visitor visitor)
  89.         {
  90.             visitor.Apply(this);
  91.         }
  92.  
  93.  
  94.         public override void Apply(Visitor visitor, string prpName)
  95.         {
  96.             visitor.Apply(this, prpName);
  97.         }
  98.  
  99.     }
  100.  
  101. class Program
  102.     {
  103.         static void Main(string[] args)
  104.         {
  105.             string catName = "Барсик";
  106.             var animals = new List<Animal>() {new Cat(catName), new Cat("Кузя"), new Dog(""), new Squirel("")};
  107.  
  108.             var visitor = new Visitor();
  109.  
  110.             foreach (Animal animal in animals)
  111.             {
  112.                 if (animal.Name == catName)
  113.                 {
  114.  
  115.                     animal.Apply(visitor, nameof(Cat.Tail));
  116.                     var ee = visitor.GetPropValue;
  117.                 }
  118.                 Console.ReadLine();
  119.             }
  120.         }
  121.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы