c# - 如何从抽象父类(super class)中引用子类的字段?

标签 c# inheritance reflection

类似:How can I access an instance field in an abstract parent class via reflection? ,但只是名义上的,没有人实际使用或引用那里的反射。

约束:

  • C#
  • 必须使用抽象类继承
  • 必须能够传入字符串作为字段标识符(愿意协商)

    public class ViewModel : BaseClass
    {
     public Car Car { get; set; }
    }
    public abstract class BaseClass
    {
     public object GetField(string field){
      //return Car if .GetField("Car") is called
     }
    }
    

    我认为这需要反射(reflection),但我无法完全理解它。如何访问本例中的 Car 字段?

  • 最佳答案

    试试这个:

    [TestFixture]
    public class TravisSerialisationTest
    {
        [Test]
        public void GetPropertyValueTest()
        {
            var volvo = "Volvo";
            var viewModel = new ViewModel() { Car = volvo };
            var field = viewModel.GetField(() => viewModel.Car);
            Assert.AreEqual(volvo,field);
        }
    }
    
    public class ViewModel : BaseClass
    {
        public string Car { get; set; }
    }
    
    public abstract class BaseClass
    {
        public T GetField<T>(Expression<Func<T>> propertyExpression )
        {
            return propertyExpression.Compile().Invoke();
        }
    }
    

    关于c# - 如何从抽象父类(super class)中引用子类的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12733339/

    相关文章:

    c# - 给菜单项添加点击事件

    c# PDF 中的高分辨率图像

    c# - 如何在 XAML 中设计非平面 UI

    java - 只允许某些类访问私有(private)变量的接口(interface)

    c# - 如何找到所有包含匹配模式的类型/成员的程序集?

    c# - 在格式错误的 xml 中转义属性中的内部引号

    c++ - 多模板化接口(interface)继承名称隐藏

    C++ - 继承和初始化问题

    java - 在Java中动态加载一个类并调用一个方法

    java - 如何在不知道类的包的情况下实例化一个类?