C# 使用typeof时的类型继承
我正在尝试创建一个类结构,如下所示:C# 使用typeof时的类型继承,c#,generics,inheritance,abstraction,typeof,C#,Generics,Inheritance,Abstraction,Typeof,我正在尝试创建一个类结构,如下所示: public abstract class ParentClass { protected virtual void BuildQueries() { var Engine = new FileHelperEngine(typeof(TopType)); DataPoints = Engine.ReadFile(ResumeName) as TopType[]; } protected Par
public abstract class ParentClass
{
protected virtual void BuildQueries()
{
var Engine = new FileHelperEngine(typeof(TopType));
DataPoints = Engine.ReadFile(ResumeName) as TopType[];
}
protected Parent TopType;
}
public class ChildClass : ParentClass
{
protected override Child TopType
}
以及类型:
public abstract class Parent
{
//some class members here
}
public class Child : Parent
{
//some class members here
}
我想这里有一个简单的答案,但我对C#来说太陌生了,不知道应该用谷歌搜索什么。我试过使用泛型,但就是做不好
我知道如果没有遗产我会写
var Engine = new FileHelperEngine(typeof(Parent));
但这是我一直在努力寻找的遗产的一部分
抱歉,我没有提到FileHelperEngine引用了FileHelpers C#library,我确实认为您在寻找泛型,但我不完全确定,因为您的问题不清楚
public abstract class ParentClass<T> where T : Parent
{
protected virtual void BuildQueries()
{
var Engine = new FileHelperEngine<T>();
var r = Engine.ReadFile(ResumeName);
}
protected T TopType { get; set; }
// (...)
}
public class ChildClass : ParentClass<Child>
{
// don't need to override anything, because your property is generic now
// which means it will be of type `Child` for this class
}
public class FileHelperEngine<T>
where T : Parent // this generic constraint might not be necessary
{
public T[] ReadFile(string name)
{
}
}
公共抽象类ParentClass,其中T:Parent
{
受保护的虚拟void BuildQueries()
{
var Engine=new FileHelperEngine();
var r=Engine.ReadFile(ResumeName);
}
受保护的T TopType{get;set;}
// (...)
}
公共类子类:父类
{
//不需要重写任何内容,因为您的属性现在是泛型的
//这意味着该类的类型为'Child'
}
公共类FileHelperEngine
其中T:Parent//可能不需要此通用约束
{
公共T[]读取文件(字符串名称)
{
}
}
我确实认为您在寻找泛型,但我不能完全确定,因为您的问题不清楚
public abstract class ParentClass<T> where T : Parent
{
protected virtual void BuildQueries()
{
var Engine = new FileHelperEngine<T>();
var r = Engine.ReadFile(ResumeName);
}
protected T TopType { get; set; }
// (...)
}
public class ChildClass : ParentClass<Child>
{
// don't need to override anything, because your property is generic now
// which means it will be of type `Child` for this class
}
public class FileHelperEngine<T>
where T : Parent // this generic constraint might not be necessary
{
public T[] ReadFile(string name)
{
}
}
公共抽象类ParentClass,其中T:Parent
{
受保护的虚拟void BuildQueries()
{
var Engine=new FileHelperEngine();
var r=Engine.ReadFile(ResumeName);
}
受保护的T TopType{get;set;}
// (...)
}
公共类子类:父类
{
//不需要重写任何内容,因为您的属性现在是泛型的
//这意味着该类的类型为'Child'
}
公共类FileHelperEngine
其中T:Parent//可能不需要此通用约束
{
公共T[]读取文件(字符串名称)
{
}
}
我确实认为您在寻找泛型,但我不能完全确定,因为您的问题不清楚
public abstract class ParentClass<T> where T : Parent
{
protected virtual void BuildQueries()
{
var Engine = new FileHelperEngine<T>();
var r = Engine.ReadFile(ResumeName);
}
protected T TopType { get; set; }
// (...)
}
public class ChildClass : ParentClass<Child>
{
// don't need to override anything, because your property is generic now
// which means it will be of type `Child` for this class
}
public class FileHelperEngine<T>
where T : Parent // this generic constraint might not be necessary
{
public T[] ReadFile(string name)
{
}
}
公共抽象类ParentClass,其中T:Parent
{
受保护的虚拟void BuildQueries()
{
var Engine=new FileHelperEngine();
var r=Engine.ReadFile(ResumeName);
}
受保护的T TopType{get;set;}
// (...)
}
公共类子类:父类
{
//不需要重写任何内容,因为您的属性现在是泛型的
//这意味着该类的类型为'Child'
}
公共类FileHelperEngine
其中T:Parent//可能不需要此通用约束
{
公共T[]读取文件(字符串名称)
{
}
}
我确实认为您在寻找泛型,但我不能完全确定,因为您的问题不清楚
public abstract class ParentClass<T> where T : Parent
{
protected virtual void BuildQueries()
{
var Engine = new FileHelperEngine<T>();
var r = Engine.ReadFile(ResumeName);
}
protected T TopType { get; set; }
// (...)
}
public class ChildClass : ParentClass<Child>
{
// don't need to override anything, because your property is generic now
// which means it will be of type `Child` for this class
}
public class FileHelperEngine<T>
where T : Parent // this generic constraint might not be necessary
{
public T[] ReadFile(string name)
{
}
}
公共抽象类ParentClass,其中T:Parent
{
受保护的虚拟void BuildQueries()
{
var Engine=new FileHelperEngine();
var r=Engine.ReadFile(ResumeName);
}
受保护的T TopType{get;set;}
// (...)
}
公共类子类:父类
{
//不需要重写任何内容,因为您的属性现在是泛型的
//这意味着该类的类型为'Child'
}
公共类FileHelperEngine
其中T:Parent//可能不需要此通用约束
{
公共T[]读取文件(字符串名称)
{
}
}
也许只是我,但你真正的问题是什么?我的问题是,var Engine=new FileHelperEngine(typeof([我如何抽象这篇文章?])。我应该在typeof中添加什么使其动态?您可以调用GetType()
。它应该返回当前对象的类型您的ChildClass
尝试重写字段。这是不可能的。但是虚拟财产可以被覆盖。谢谢大家,我想@MarcinJuraszek为我回答了这个问题。对不起,这个问题太不连贯了。我显然很困惑。也许只是我,但你真正的问题是什么?我的问题是,var Engine=new FileHelperEngine(typeof([我如何抽象这篇文章?])。我应该在typeof中添加什么使其动态?您可以调用GetType()
。它应该返回当前对象的类型您的ChildClass
尝试重写字段。这是不可能的。但是虚拟财产可以被覆盖。谢谢大家,我想@MarcinJuraszek为我回答了这个问题。对不起,这个问题太不连贯了。我显然很困惑。也许只是我,但你真正的问题是什么?我的问题是,var Engine=new FileHelperEngine(typeof([我如何抽象这篇文章?])。我应该在typeof中添加什么使其动态?您可以调用GetType()
。它应该返回当前对象的类型您的ChildClass
尝试重写字段。这是不可能的。但是虚拟财产可以被覆盖。谢谢大家,我想@MarcinJuraszek为我回答了这个问题。对不起,这个问题太不连贯了。我显然很困惑。也许只是我,但你真正的问题是什么?我的问题是,var Engine=new FileHelperEngine(typeof([我如何抽象这篇文章?])。我应该在typeof中添加什么使其动态?您可以调用GetType()
。它应该返回当前对象的类型您的ChildClass
尝试重写字段。这是不可能的。但是虚拟财产可以被覆盖。谢谢大家,我想@MarcinJuraszek为我回答了这个问题。对不起,这个问题太不连贯了。我显然是糊涂了,多谢了。我以前在这些房子里混过,但就是不知道怎么把它们放在一起。我想这就是我需要的。在马克回答之前,我要做一点测试。测试非常完美,这正是我想要的。谢谢你,谢谢你。我以前在这些房子里混过,但就是不知道怎么把它们放在一起。我想这就是我需要的。在马克回答之前,我要做一点测试。工作得很好,w