0

「参照」クラスをジェネリック型として含むリストがあります。したがって、「参照」クラスの子でリストを埋めることができるはずですが、コンパイラはエラーを報告します:

'naturalCalc.Enginee.Reference'の定義が含まれておらず、型の最初の引数を受け入れる'Opener'拡張メソッドが見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?) (CS1061)'Opener''naturalCalc.Enginee.Reference'ToPostfix.cs:27,34

「ToPostfix」クラスのスイッチ コードは、2 番目のケースで項目が「Opener」プロパティを持つことを保証します。

// 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;
            }
        }
    }
}
4

3 に答える 3

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.
}
于 2012-07-15T17:04:55.687 に答える
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; } 
    }
}

よろしく

于 2012-07-15T17:06:25.353 に答える
0

Listofを使用していますが、 でプロパティをReference定義しています。インスタンスからプロパティにアクセスできるようにする場合は、そこに移動します。OpenerMyBracketClassReference

于 2012-07-15T17:18:13.073 に答える