2012-07-15 31 views
0

我有一个列表,它包含'Reference'类作为泛型类型。所以,我应该能够填补我的名单与“参考”类的子类,但是编译器报错:编译错误:Property not recognized

'naturalCalc.Enginee.Reference' does not contain a definition for 'Opener' and no extension method 'Opener' accepting a first argument of type 'naturalCalc.Enginee.Reference' could be found (are you missing a using directive or an assembly reference?) (CS1061) ToPostfix.cs:27,34

在“ToPostfix”类拨码开关确保项目具有“开瓶器”属性在第二种情况下。

// The 'MyBrackets' class which contains the 'Opener' property. 
public class MyBrackets : naturalCalc.Enginee.Reference 
{ 
    private bool opener; 
    public MyBrackets(bool opener) 
    { 
     this.opener = opener; 
    } 

    public bool Opener { get { return this.Opener; } } 
} 

// The 'ToPostfix' class in which the error is taken place. 
class ToPostfix 
{ 
    List<Reference> infix = new List<Reference>(); 
    List<Reference> postfix = new List<Reference>(); 

    public ToPostfix(List<Reference> infixForm) 
    { 
     this.infix = infixForm; 

     foreach (Reference item in this.infix) 
     { 
      switch (item.ToString()) 
      { 
       case "naturalCalc.Enginee.MyFloat": 
        this.postfix.Add(item); 
        break; 

       case "naturalCalc.Enginee.MyBrackets": 
        if (item.Opener) 
        { 
         this.postfix.Add(item); 
        } 
        break; 
      } 
     } 
    } 
} 

回答

1

你应该尝试,如果可能的方法进入界面。

如果无法做到这一点,你可以动态测试的类型和投如下:

Opener opener = item as Opener; 
if (opener != null) 
{ 
     if (opener.Opener) 
     { 
      this.postfix.Add(item); 
     } 
} 

而且你消气无法正常工作。你也应该学会使用自动实现的属性:

public class MyBrackets : naturalCalc.Enginee.Reference 
{ 
    public MyBrackets(bool opener) 
    { 
     this.Opener = opener; 
    } 

    public bool Opener { get; private set; } // Auto-implemented property. 
} 
0

这是不是一个完整的答案,但我相信,有您MyBrackets类的错误。 openerOpener是不一样的财产。

我相信它应该是:

public class MyBrackets : naturalCalc.Enginee.Reference 
{ 
    public MyBrackets(bool opener) 
    { 
     this.Opener = opener; 
    } 

    public bool Opener 
    { 
     private set { this.Opener = value; } 
     get { return this.Opener; } 
    } 
} 

问候

+0

OP在'get'中只需要一个小写的'opener'。 'public bool Opener {get {return this.opener; }}' – 2012-07-15 17:08:37

+0

@Kevin是的,那就够了=) – 2012-07-15 17:09:50

0

您正在使用的ReferenceList,但确定在MyBracketClassOpener财产。如果您希望从Reference实例访问您的资产,请将其移至此处。