컴파일러 오류 CS0831

업데이트: 2007년 11월

오류 메시지

식 트리에는 기본 액세스를 사용할 수 없습니다.
An expression tree may not contain a base access.

기본 액세스는 일반적으로 가상 함수 호출이 되는 함수 호출을 기본 클래스 메서드에서 비가상 함수 호출로 만드는 것을 의미합니다. 기본 액세스는 식 트리 자체에서 사용할 수 없지만 기본 클래스 메서드를 호출하는 클래스에서 도우미 메서드를 호출할 수 있습니다.

이 오류를 해결하려면

  • 이러한 방식으로 기본 클래스 메서드에 액세스해야 하는 경우 기본 클래스를 호출하는 도우미 메서드를 만들고 식 트리에서 도우미 메서드를 호출하도록 지정합니다. 이 방법은 다음 코드에서 보여 줍니다.

예제

다음 예제에서는 CS0831 오류가 발생하는 경우를 보여 줍니다.

// cs0831.cs
using System;
using System.Linq;
using System.Linq.Expressions;

public class A
{
    public virtual int BaseMethod() { return 1; }
}
public class C : A
{
    public override int BaseMethod() { return 2; }
    public int Test(C c)
    {
        Expression<Func<int>> e = () => base.BaseMethod(); // CS0831

        // Try the following line instead, 
        // along with the BaseAccessHelper method.
        // Expression<Func<int>> e2 = () => BaseAccessHelper();
        return 1;
    } 
    // Uncomment to call from e2 expression above.
    // int BaseAccessHelper()
    // {
    //     return base.BaseMethod();
    // }
    
}