我很抱歉,如果说这个措辞不好或之前有人问过,但我似乎找不到与此相关的任何内容而且我已经累了。
好吧,我正在尝试做的是在子类中获取我的特征的值,以便我需要引用一个子类的实例,但是我没有关于它将是什么特征的信息使用。这对我来说更容易在代码中解释,所以这就是我想要做的。
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.*/;
}
}
编辑:修复了我的一些问题,现在应该更容易理解。
答案 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();
}
}