2016-10-18 1 views
0
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(); 

하위 클래스가 다를 수 있습니다. db4o에 대한 쿼리를 만들기 위해이 인스턴스를 가져와야합니다.C# 하위 클래스 유형 가져 오기 및이 객체를 만들려면

+0

당신은이 클래스의 MainClass { 공공 문자열 것으로 someMethod() {맥락에서 // "이"를 찾고 있습니다. "this.getType()"이 "namespace.SubClass"가 될 경우; 하위 클래스 cls = 새 하위 클래스(); ""을 (를) 반환하십시오. } } 클래스 하위 클래스 : MainClass { public int someField; } –

+1

이러한 종류의 코드를 작성하면 다형성의 목적을 무효화 할 수 있습니다. someMethod를 가상으로 만든 다음 각 하위 클래스에서 구현되도록하십시오. –

+0

당신이하려는 일이 명확하지 않습니다. 유형이 스스로를 재현 할 수 있기를 원하십니까? – itsme86

답변

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

class SubClass : MainClass 
{ 
    public int someField; 
} 

해킹이지만 다형성의 목적을 달성하지 못하기 때문에 권장되지 않습니다.

+0

'Type type = this.GetType();'이 (가) 해당 유형의 인스턴스를 작성하지 않고 있습니다 ... 형식을 가져옵니다. –

+0

SubClass의 인스턴스도 만들 수 있습니다. SubClass cls = new SubClass(); 일부 방법 –

+0

@ 위험 구분 없음. '새로운 SubClass(). someMethod()'는'MainClass'가 아니라'SubClass'를 보여줄 것입니다. – itsme86

0

일반적으로, 일부 처리를 만들기 위해 기본 클래스에서 나쁜 결정을 하위 클래스 유형입니다 평가, 기본 클래스에 합성 방법을 추가하는 것을 고려하고 서브 클래스에 특수 처리를 활용 :

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 
    } 
} 

사용법 :

하위 클래스 -
SubClass obj = new SubClass(); 
obj.ComposedMethod(); 
+0

db4o로 다른 하위 클래스로 작업 할 때이 기능이 필요합니다. 예 : private string someMethod() { IList obj = db.Query (대리자 (하위 클래스 obj) {return obj.Points == 100;}); 일부 문자열을 반환합니다. } SubClasses 중 하나가 "someMethod"메서드를 사용하면 "SubClass"를 가져와야합니다. – MrGabriel

관련 문제