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 所逃避的那样,它有点 hacky:

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 回答