7

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

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

在哪里

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

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

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

知道如何解决吗?

4

3 回答 3

11

The 'this' keyword refers to the current instance of the class. In the constructor, you don't have access to the instance because you are about to create one... So try below:

public partial class WizardPage1 : WizardPage
{
    public WizardPage1()
        : base(0, getLocalizedString(typeof(WizardPage1), "PageTitle"))
    {
    }
}
于 2013-09-26T03:58:58.403 回答
0

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

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

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

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

这里的关键是GetType()当你已经有一个对象的实例时你正在调用。

于 2013-09-26T04:20:18.307 回答
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")
    {
    }
}

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

于 2013-09-26T04:28:55.270 回答