Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#获取子类的类型并创建该类的对象 class主类{ 私有int方法(){ IList obj=db.Query(委托(子类obj){ 返回目标点==100; }); } } 类子类:MainClass{ 公共领域; } 子类obj=新的子类(); obj.someMethod();_C# - Fatal编程技术网

C#获取子类的类型并创建该类的对象 class主类{ 私有int方法(){ IList obj=db.Query(委托(子类obj){ 返回目标点==100; }); } } 类子类:MainClass{ 公共领域; } 子类obj=新的子类(); obj.someMethod();

C#获取子类的类型并创建该类的对象 class主类{ 私有int方法(){ IList obj=db.Query(委托(子类obj){ 返回目标点==100; }); } } 类子类:MainClass{ 公共领域; } 子类obj=新的子类(); obj.someMethod();,c#,C#,子类可以是不同的,我需要获取这个实例来查询db4o class MainClass { private int someMethod() { IList <SubClass> obj = db.Query <SubClass> (delegate(SubClass obj) { return obj.Points == 100; }); } } class SubClass : MainClass

子类可以是不同的,我需要获取这个实例来查询db4o

    class MainClass { 
      private int someMethod() { 
    IList <SubClass> obj = db.Query <SubClass> (delegate(SubClass obj) { 
      return obj.Points == 100; 
    });
}
    } 

    class SubClass : MainClass { 
        public int someField; 
    } 

    SubClass obj = new SubClass(); 
    obj.someMethod();

这是一种攻击,但不推荐,因为它不能实现多态性的目的

> P>从基类中评估子类类型以进行一些处理,通常是一个错误的决定,考虑将组合方法添加到基类中,然后对其子类采用特殊处理:

class MainClass
{
    public string someMethod()
    {
        Type type = this.GetType(); //SubClass
        return "";
    }
}

class SubClass : MainClass
{
    public int someField;
} 
用法:

class MainClass {
    public string ComposedMethod(){
        //Base class processing...
        var retVal = someMethod();
        //Even more Base class processing...
        return retVal; 
    } 
    public virtual string someMethod(){ 
    } 
} 

class SubClass : MainClass { 
    public override string someMethod(){
        return this.GetType().ToString(); //Or whatever you need to do
    } 
} 

您正在查找这个类MainClass{public string someMethod(){//在上下文“this”-子类中。如果“this.getType()”它将是“namespace.SubClass”;子类cls=new SubClass();return“”;}}}类子类:MainClass{public int someField;}构建这样的代码将破坏多态性的目的。使someMethod虚拟化,然后在每个子类中实现它。不清楚您要做什么。你想要一个类型能够自我复制吗?为什么对象中的“this”会返回一个不同的对象?我需要它来处理db4o的不同子类。例如,IList obj=db.Query(委托(SomeClass obj){return obj.Points==100;})<代码>类型类型=this.GetType()没有创建该类型的实例,它只是。。。获取类型。您可以创建子类的实例,也可以创建子类cls=new SubClass();在里面someMethod@DangerZone没有
new SubClass()。someMethod()
将显示
SubClass
,而不是
MainClass
。啊,读错了。没有看到OP从
子类
实例调用了
someMethod()
。我需要它来使用db4o处理不同的子类。例如,私有字符串someMethod(){IList obj=db.Query(委托(子类obj){return obj.Points==100;});返回一些字符串;}当其中一个子类采用方法“someMethod”时,我需要获取“SubClass”。
SubClass obj = new SubClass(); 
obj.ComposedMethod();