错误CS0027:关键字'this'在当前上下文中不可用

时间:2013-09-26 03:48:21

标签: c# .net constructor

我对构造函数进行了以下初始化:

public partial class WizardPage1 : WizardPage
{
    public WizardPage1()
        : base(0, getLocalizedString(this.GetType(), "PageTitle"))
    {
    }
}

,其中

public static string getLocalizedString(Type type, string strResID)
{
}

this.GetType()部分导致以下错误:

  

错误CS0027:关键字'此'在当前上下文中不可用

知道怎么解决吗?

3 个答案:

答案 0 :(得分:7)

this关键字引用类的当前实例,在构造函数中你没有即时,你要创建一个..所以试试下面

public partial class WizardPage1 : WizardPage
{
    public WizardPage1()
        : base(0, getLocalizedString(typeof(WizardPage1), "PageTitle"))
    {
    }
}

答案 1 :(得分:0)

this关键字引用类的当前实例,但是当您在构造函数中调用它时,您还没有要引用的实例(因为它正在构造中)。

也许另一种解决方案是在您的基类中拥有一个可以在子类中覆盖的属性。 E.g。

public class WizardPage
{
   public virtual string PageTitle { get; }
   ...
}

public class WizardPage1 : WizardPage
{
   public override string PageTitle
   {
      get 
      {
          return getLocalizedString(this.GetType(), "PageTitle");
      } 
   }
}

这里的关键是,当你已经拥有该对象的实例时,你正在调用GetType()

答案 2 :(得分:0)

@Damith对于为什么这不起作用是正确的,但处理这个更简单的一种方法可能是(忽略实现细节):

public abstract class WizardPage
{
    // Replace or override existing constructor with this
    public WizardPage(int unknownInt, Type currentType, string str)
    {
        if (currentType == null)
            currentType = System.Reflection.MethodBase()
                              .GetCurrentMethod().GetType();

        var localString = getLocalizedString(currentType, str);

        // Existing logic here
    }
}

将您的孩子班级改为:

public partial class WizardPage1 : WizardPage
{
    public WizardPage1()
        : base(0, this.GetType(), "PageTitle")
    {
    }
}

不幸的是,如果您无法访问基类的代码,这种方法需要添加一个抽象层。