3

VB.Net アプリケーションを C# に変換しています (C# の学習も兼ねています) が、問題が発生しました。関数の 1 つはオブジェクトを受け取り、渡された内容に基づいて特定のパラメーターに変更を適用します。このように、1 つの関数を使用して、渡されたコントロールを更新できます。これは VB で正常に機能しています。

完全な関数の背後にはさらに多くのロジックがありますが、基本を示す縮小バージョンを次に示します。

public void TransformObject(object objObject, int LeftPadding, int TopPadding, int WidthChange, int HeightChange)
{        
    objObject.Top = TopPadding;
    objObject.Left = LeftPadding;
    objObject.Width = WidthChange;
    objObject.Height = HeightChange;
}

問題は、オブジェクト型を使用しているため、「上」、「左」、「幅」、「高さ」などが定義されていないことです。

可能なコントロールの種類ごとに個別の関数または定義を作成することなく、既存の構造を維持する方法はありますか?

編集: .Net 3.5 フレームワークを使用しています。

4

6 に答える 6

1

使用できますdynamic

public void TransformObject(object objObject, int LeftPadding, int TopPadding, int WidthChange, int HeightChange)
{        
    dynamic dynObject = (dynamic)objObject;
    dynObject.Top = TopPadding;
    dynObject.Left = LeftPadding;
    dynObject.Width = WidthChange;
    dynObject.Height = HeightChange;
}

Controlまたは、これらすべての型に共通するインターフェイス/基本クラス (おそらく ?) を見つけて、代わりにメソッド シグネチャで使用しobjectます。

于 2013-08-27T14:33:26.310 に答える
1

、、、およびMyBaseClassの定義があるような基本クラスを使用します。TopLeftWidthHeight

public class MyBaseClass
{
    public int Top {get; set;}
    public int Left{get; set;}
    public int Width {get; set;}
    public int Height {get; set;}

}

渡したいすべてのクラスは、その基本クラスから派生する必要があります

public class MyDerivedClass : MyBaseClass
{
}
于 2013-08-27T14:33:30.280 に答える
1

ここでの解決策の 1 つは、インターフェイスの使用です。たとえば、私があなたの質問を正しく理解していれば、これを試すことができます:

public interface IMyInterface
    {
        int Top { get; set;}
        int Left { get; set; }
        int Width { get; set; }
        int Height { get; set; }
    }

public void TransformObject(object objObject, int LeftPadding, int TopPadding, int WidthChange, int HeightChange)
        {
            if (objObject is IMyInterface)
            {
                ((IMyInterface)objObject).Top = TopPadding;
                ((IMyInterface)objObject).Left = LeftPadding;
                ((IMyInterface)objObject).Width = WidthChange;
                ((IMyInterface)objObject).Height = HeightChange;
            }
        }

コードは最適化されていませんが、これでうまくいくはずです:)

于 2013-08-27T14:44:34.357 に答える