编译错误:Property not recognized
问题描述:
我有一个列表,它包含'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;
}
}
}
}
答
你应该尝试,如果可能的方法进入界面。
如果无法做到这一点,你可以动态测试的类型和投如下:
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.
}
答
这是不是一个完整的答案,但我相信,有您MyBrackets类的错误。 opener
和Opener
是不一样的财产。
我相信它应该是:
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; }
}
}
问候
答
您正在使用的Reference
的List
,但确定在MyBracketClass
的Opener
财产。如果您希望从Reference
实例访问您的资产,请将其移至此处。
OP在'get'中只需要一个小写的'opener'。 'public bool Opener {get {return this.opener; }}' – 2012-07-15 17:08:37
@Kevin是的,那就够了=) – 2012-07-15 17:09:50