访问属性

本文关键字:属性 访问 | 更新日期: 2023-09-27 18:07:25

public class SomeClass<TElement>
{
    TElement _element;
    public void SomeFunction()
    {
        _element.Property = someValue;
    }
    public TElement Element 
    {
        get 
        {
            return _element;
        }
        set 
        {
            _element = value;
        }
    }
}

这基本上就是我想做的。此类中的"TElement"将始终是从包含"属性"的类继承的类。我希望能够访问"属性"并对其进行修改,并且我希望"SomeClass"公开类型为"TElement"的属性。当我尝试这样做时,我无法访问属性,因为"TElement 不包含...的定义"。

如果我不使用"TElement",而是直接使用上述类,我不知道如何使"元素"属性显示为实例上的不同类型。

我走错路了吗?谁能指出我获得此类功能的正确方向?谢谢

访问属性

你需要一个泛型类型约束来表示TElement必须具有以下Property: https://msdn.microsoft.com/en-us/library/Bb384067.aspx

例如:

public interface IHaveProperty
{
    string Property { set; }
}
public class SomeClass<TElement> where TElement : IHaveProperty
{
    TElement _element;
    void SomeFunction() 
    {
         // the generic constraint on TElement says that 
         // TElement must implement IHaveProperty, so you can
         // access Property here.
         _element.Property = string.Empty;
    }
}
public class SomeClass<TElement> where TElement : IProperty
{
    TElement _element;
    public void SomeFunction()
    {
        _element.Property = someValue;
    }
    public TElement Element 
    {
        get 
        {
            return _element;
        }
        set 
        {
            _element = value;
        }
    }
}
public interface IProperty
{
    SomeType Property { get; }
}
public class SomeClass<TElement>
    where TElement : YourBaseClass
{ ... }

这称为泛型类型约束:

在泛型类型定义中,where 子句用于指定对可用作泛型声明中定义的类型参数的参数的类型约束