2010-01-08 6 views
1

상속 될 수있는 클래스를 만들고 싶습니다. 추상화해야한다는 것을 알고 있습니다. 하지만 이제 문제는 정적으로 만들지 않고 해당 클래스의 함수를 사용하고 싶다는 것입니다. 어떻게하면 돼? 여기함수를 정적으로 만들지 않고 추상 클래스에서 함수에 액세스하는 방법은 무엇입니까?

public abstract Class A 
{ 
A() 
{} 
public void display() 
{} 
} 

public Class B:A 
{ 
base.A() // this is accessible 
this.display() // this is not accessible if i dont make this function static above 
} 
+0

이러한 방법을 사용하는 방법을 (* 컴파일하지 않습니까?) 내가 이해할 수 있는지 잘 모르겠다. –

+1

제공 한 예제에서 어떤 컨텍스트에서'display' 메서드를 호출하려고하는지 명확하지 않다. 클래스 B의 정적 메서드입니까? 정적 필드 이니셜 라이저입니까? –

답변

2

귀하의 예제는 다음과 같이 고려할 수, 컴파일되지 않습니다 :

using System; 

public abstract class A 
{ 
    protected A() 
    { 
     Console.WriteLine("Constructor A() called"); 
    } 
    public void Display() 
    { 
     Console.WriteLine("A.Display() called"); 
    } 
} 

public class B:A 
{ 
    public void UseDisplay() 
    { 
     Display(); 
    } 
} 

public class Program 
{ 
    static void Main() 
    { 
     B b = new B(); 
     b.UseDisplay(); 
     Console.ReadLine(); 
    } 
} 

출력 :

Constructor A() called 
A.Display() called 

참고 : 새로운 B 만들기 ()는 암시 적으로 A()를 호출합니다. "보호 수준으로 인해 AA() '에 액세스 할 수 없습니다.

0

는이 작업을 수행 할 수있는 방법입니다 .. 사실이 아니다

public abstract class A 
{ 
    public virtual void display() { } 
} 

public class B : A 
{ 
    public override void display() 
    { 
     base.display(); 
    } 

    public void someothermethod() 
    { 
     this.display(); 
    } 
} 
+2

가상으로 표시해야합니다. 또한, 왜 그는 오버라이드가 전혀 필요하지 않습니까? –

+0

디스플레이를 무시하고 싶지 않습니다. 다른 방법이 있습니까? 이것은 구현하려는 첫 번째 OO 프로그램입니다. 나는 단지 내 프로젝트의 요구 사항에 따라 정적 인 디스플레이 기능을 만들 수 없다는 것을 알고있다. 최선의 방법을 제안 해주세요. 클래스 A를 추상화하지 않거나 무언가로 만들 수 있지만 멤버 함수를 정적으로 만들 수 있습니다. –

2

합니다. Display()를 정적으로 만들 필요는 없습니다. 하위 클래스에서 자유롭게 호출 할 수 있습니다. 반면에, 당신은 그렇게 생성자를 호출 할 수 없습니다.

아마도이 예제에서는 오류 일 뿐이지 만 코드의 실제 문제는 클래스 정의 중간에 메서드 호출을 넣을 수 없다는 것입니다.

이 시도 :

public abstract class A 
{ 
public void Display(){} 
} 

public class B:A 
{ 
public void SomethingThatCallsDisplay() 
{ 
    Display(); 
} 
} 
+0

구문을 고려하지 말아라. 약간의 오류가있을 수 있지만 올바른 것으로 만들 것이다. OO에만 관련된 솔루션에 대해서 알려주세요. OO –

+0

@cambron do에 새로 온 것입니다. 그렇다면 디스플레이에는 항상 단일 복사본이 있다는 의미입니까? –

+1

OO는 처음부터 적절합니다. Display()를 정적으로 만들 필요가 없습니다. 문제는 좀 더 미묘한 것이어야하며, 우리에게 더 많은 정보를 주어야합니다. 디스플레이 컨텍스트에서 단일 사본의 의미를 알 수 없습니다. 좀 더 정확하게 할 수 있습니까? –

관련 문제