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