컴파일러 오류 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();
// }
}