进入财产

时间:2015-08-11 07:31:13

标签: c# class types

mdl_question_obe

这基本上就是我想要做的。此类中的“TElement”将始终是一个继承自包含“Property”的类的类。我希望能够访问“Property”并修改它,我希望“SomeClass”公开一个类型为“TElement”的属性。当我尝试这样做时,我无法访问属性,因为“TElement不包含...的定义”。

如果我不使用“TElement”,但是直接提到的类,我不知道如何使“元素”属性显示为依赖于实例的不同类型。

我是否采取了错误的方式?有人能指出我正确的方向来获得这种功能吗? 感谢

3 个答案:

答案 0 :(得分:3)

您需要一个通用类型约束来表示TElement必须包含此Propertyhttps://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;
    }

}

答案 1 :(得分:2)

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; }
}

答案 2 :(得分:1)

public class SomeClass<TElement>
    where TElement : YourBaseClass
{ ... }

这称为generic type constraint

  

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