在子类中获取特征

时间:2014-12-21 08:58:36

标签: c# traits

我很抱歉,如果说这个措辞不好或之前有人问过,但我似乎找不到与此相关的任何内容而且我已经累了。

好吧,我正在尝试做的是在子类中获取我的特征的值,以便我需要引用一个子类的实例,但是我没有关于它将是什么特征的信息使用。这对我来说更容易在代码中解释,所以这就是我想要做的。

public class TraitUser<T> 
{
    public void DoThingWithT(T thing) 
    {
        thing.ToString();
    }
}

public class TraitInspector 
{
    public void DoThing() 
    {
        // This is where I run into my issue, 
        // I need to be able to get the trait that 
        // an instance of the TraitUser class is using to continue.
        TraitUser<> tUser = GetRandomTraitUser()/*Imagine this returns an instance of TraitUser with a random trait, this is where my issue comes in.*/;
    }
}

编辑:修复了我的一些问题,现在应该更容易理解。

2 个答案:

答案 0 :(得分:0)

如果我了解您的情况,您需要在TrairInspector的TraitUser实例中获取有关泛型类型T的信息。

public interface IGetTraitInfo
{
    Type GetTraitObjectType();
    object GetTraitObject();
}

public class TraitUser<T> : IGetTraitInfo
{
    private T _thing;

    public void DoThingWithT(T thing) 
    {
        _thing = thing;
    }

    public Type GetTraintObjectType()
    {
        return typeof(T);
    }

    public Type GetTraitObject()
    {
        return _thing;
    }
}

public class TrairInspector 
{
    public void InspectTraitUser(IGetTraitInfo traitUser) 
    {
        Type traitType = traitUser.GetTraintObjectType();
        object data = traitUser.GetTraitObject();
    }
}

答案 1 :(得分:0)

我完全不明白,但这可能会对你有所帮助。

public interface ITrait
{
    string DoSomething();
}

public class Trait<T> where T : ITrait, new()
{
    public string DoSomething()
    {
        ITrait trait = new T();
        return trait.DoSomething();
    }
}

public class TraitUser : ITrait
{
    public string DoThing()
    {
        return "return something";
    }
}

public class TrairInspector
{
    public void DoThing()
    {
        Trait<TraitUser> traitUser = new Trait<TraitUser>();
        traitUser.DoSomething();
    }
}