1

たとえば、 Initialize() メソッドでコードを実行する代わりに、 somecode.run() のような行を書きたいだけで、すべてが実行され、すべてのコードを別の場所に書くことができます。組織のために。

コードがその場所にあったように動作するようにしたいので、プライベートなどにアクセスできます.

これを行う最良の方法は何ですか?

明確にするために編集:

ここに例があります

public class game
{
    public void Initialize()
    { 
     I want to run some code here but I don't want to write it here, 
     I want to write it in another file for the sake of organization,
     and just  reference it somehow here, but yet still be able to use the
     privates as if it was in this spot
    }
}
4

2 に答える 2

1

部分的なクラスとメソッドは、あなたが話していることを実行できるはずです (MS ドキュメントhttp://msdn.microsoft.com/en-us/library/wa80x488.aspx )。

MSDN ドキュメントで定義されているものよりも複雑なことを行う必要がある理由がわかりません。virtuals を使用してオーバーライドを許可し、基本関数を呼び出して、元の実装を呼び出すことができます。継承を使用して適切なレベルで多くの「微調整」を行う適切な方法がありますが、最初の部分クラスとメソッドで基本的な形式を実行できるようにする必要があります。

通常、事前に作成されたコードでパーシャルの例を確認します (たとえば、DataContext による LINQ で)。

//auto-generated (or half implemented) code
public partial User
{
    public partial void OnFirstNameChanged();

    private string _FirstName = "";
    public string FirstName
    {
        get
        {
            return _FirstName;
        }
        set
        {
            _FirstName = value;
            OnFirstNameChanged();
        }
    }
}

//MyCustomStuff.cs
public partial User
{
    public partial void OnFirstNameChanged()
    {
        Console.Write(string.Format("Your name is {0}", FirstName));
    }
}
于 2012-07-31T03:32:22.080 に答える
1

必要なことを行う唯一の方法は、部分クラスを使用することです。次のようなもの:-

// In file: game1.cs
public partial class game
{
    private int Value;

    public void Initialize()
    {
        Run();
    }
}


// In file: game2.cs
public partial class game
{
    private void Run()
    {
        Value = 2;  // Access private field.
    }
}

編集: 要件を満たさない限り、部分クラスを使用したくないと述べました。あなたの要件の1つは、新しいメソッドが元のクラスのプライベートメンバーにアクセスできるようにすることであるため、要件を満たす唯一の方法だと思います。

部分クラスが要件を満たさない可能性がある唯一の状況は、メソッドがローカル変数にアクセスする必要がある場合です。ただし、その新しいメソッドのパラメーターを介してそれらのローカル変数を渡すことができます。

以上のことをすべて言いましたが、個人的には部分クラスの使用を思いとどまらせます。つまり、別の方法で実行したい場合は、要件を変更する必要があります。

于 2012-07-31T03:16:46.653 に答える