0

どちらがいいですか?クラスでメンバー変数を宣言するか、メソッドのパラメーターを返すか?パフォーマンスの側面はどちらが優れているか。

class A{ 
    //Declaring member variable
    private string name;
    private int age; 

    private method Display()
    { 
        Passing(); 
        Console.Write("{0}-{1}",name,age); 
    }

    private void Passing() 
    { 
        name = "Hello World"; 
        age = 21; 
    }
}

または

class A{
    //out parameter implementation 
    private method Display()
    { 
        string name= string.Empty; 
        int age = 0; 

        Passing(out name,out age); 

        Console.Write("{0}-{1}",name,age); 
    }

    private void Passing(out string name,out int age) 
    { 
        name = "Hello World"; 
        age = 21; 
    }
} 
4

4 に答える 4

7

それらの誰も。私は行くだろう:

class A
{
    private void Display()
    {
        string name = Passing();
        Console.WriteLine(name);
    }
    private string Passing()
    {
        return "Hello world";
    }
}

複数のものを返したい場合は、次のようなオブジェクトにカプセル化します。

class A
{
    private void Display()
    {
        var person= Passing();
        Console.WriteLine(person.Name + ": " + person.Age);
    }
    private Person Passing()
    {
        return new Person() {Name = "John Doe", Age = 99 };
    }
}
于 2012-05-21T14:10:33.467 に答える
3

うーん、どちらでもない。なぜ戻り値を持っていないのですか?

class A
{
    private void Display()
    {
        string name = GetString();
        Console.Write(name);
    }

    private string GetString()
    {
        return "Hello World";
    }
}

ここで何を達成しようとしているのかわからない。

何を達成しようとしているのかがわかったので、メソッドが純粋にクラスの内部にある場合は、返す値のスコープに依存します。それらが論理的にクラスに含まれている場合は、メンバー変数を探します。それらがメソッドの内部使用のみを対象としている場合は、戻り値としてoutパラメーターまたはカスタム型を選択します(Tuple<>ここでaを使用できます)。

匿名タイプを使用することもできますが、Jon Skeetが理解できないように、少しハッキーです。

https://msmvps.com/blogs/jon_skeet/archive/2009/01/09/horrible-grotty-hack-returning-an-anonymous-type-in​​stance.aspx

于 2012-05-21T14:10:13.677 に答える
1

間違いなく、前者。パラメータを使用することは、一般的には良い考えではありません。誤解しないでください。outパラメータには用途がありますが、この場合のように状態を設定する場合は使用しないでください。これらは、解析が成功したかどうかを示すブール値を返し、解析結果をoutパラメーターで返すTryParseなどに適しています。

于 2012-05-21T14:09:21.577 に答える
0

私の好みは:

class A
{
    private static void Main(string[] args)
    {
        Passing passing = new Passing("Hello World");
        Console.WriteLine(passing);
     }
}

class Passing
{
    public Passing(string name)
    {
        Name = name;
    }

    public string Name { get; private set; }

    public override string ToString()
    {
        return string.Format("Name: {0}", Name);
    }
}
于 2012-05-21T14:23:29.820 に答える