Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在方法之间传递变量值。。。?_C#_Oop - Fatal编程技术网

C# 在方法之间传递变量值。。。?

C# 在方法之间传递变量值。。。?,c#,oop,C#,Oop,有人能帮我在c#中将值从一个类方法传递到另一个类方法吗。我试着查找,但我在代码页中迷失了方向,找不到简单的示例。请看以下内容: //Main Program Program.cs namespace simplecode { class Program { static void Main(string[] args) { Values Values = new Values(); Values.g

有人能帮我在c#中将值从一个类方法传递到另一个类方法吗。我试着查找,但我在代码页中迷失了方向,找不到简单的示例。请看以下内容:

//Main Program Program.cs
namespace simplecode
{

    class Program
    {
        static void Main(string[] args)
        {
            Values Values = new Values();
            Values.getName();
        }
    }
}


//Separate class file or object Values.cs 


namespace simplecode
{
    public class Values
    {
        public static void getName()
        {
            Console.Clear();
            Console.Write("Enter name: ");
            string myName = Console.ReadLine();
        }
    }
}
现在,如果我执行这个命令,主程序运行getName,我可以存储myName变量。如何从主程序或另一个单独的类方法中获取myName的值?我试图从概念上理解这一点,我需要正确的语法。如果有人能解释需要什么或提供一个学习链接,我将不胜感激

谢谢
Mike

您可以让方法返回此值:

public static string getName()
{
    Console.Clear();
    Console.Write("Enter name: ");
    return Console.ReadLine();
}
然后在主程序中调用该方法并将结果存储在局部变量中:

static void Main(string[] args)
{
    string myName = Values.getName();
}
请注意,由于
getName
是一个静态方法,因此不需要创建
Values
类的实例来调用它。您可以直接在类型名称上调用它

另一方面,如果
getName
方法不是静态的:

public string getName()
{
    Console.Clear();
    Console.Write("Enter name: ");
    return Console.ReadLine();
}
然后您需要实例:

static void Main(string[] args)
{
    Values values = new Values();
    string myName = values.getName();
}

您可以让方法返回此值:

public static string getName()
{
    Console.Clear();
    Console.Write("Enter name: ");
    return Console.ReadLine();
}
然后在主程序中调用该方法并将结果存储在局部变量中:

static void Main(string[] args)
{
    string myName = Values.getName();
}
请注意,由于
getName
是一个静态方法,因此不需要创建
Values
类的实例来调用它。您可以直接在类型名称上调用它

另一方面,如果
getName
方法不是静态的:

public string getName()
{
    Console.Clear();
    Console.Write("Enter name: ");
    return Console.ReadLine();
}
然后您需要实例:

static void Main(string[] args)
{
    Values values = new Values();
    string myName = values.getName();
}

首先,您需要将变量实际存储在某个地方。现在它是方法中的一个局部变量,因此在您为它赋值后,它将立即消失

将其设置为类中的属性,并将该方法设置为实例方法而不是静态方法:

namespace simplecode
{
    public class Values
    {

        public string MyName { get; set; }

        public void getName()
        {
            Console.Clear();
            Console.Write("Enter name: ");
            MyName = Console.ReadLine();
        }
    }
}
现在,您可以调用该方法,然后提取值:

namespace simplecode
{

    class Program
    {
        static void Main(string[] args)
        {
            Values myValues = new Values();
            myValues.getName();
            Console.WriteLine(myValues.MyName);
        }
    }
}

首先,您需要将变量实际存储在某个地方。现在它是方法中的一个局部变量,因此在您为它赋值后,它将立即消失

将其设置为类中的属性,并将该方法设置为实例方法而不是静态方法:

namespace simplecode
{
    public class Values
    {

        public string MyName { get; set; }

        public void getName()
        {
            Console.Clear();
            Console.Write("Enter name: ");
            MyName = Console.ReadLine();
        }
    }
}
现在,您可以调用该方法,然后提取值:

namespace simplecode
{

    class Program
    {
        static void Main(string[] args)
        {
            Values myValues = new Values();
            myValues.getName();
            Console.WriteLine(myValues.MyName);
        }
    }
}

通常,您会从函数返回值。您需要考虑代码如何调用不同的模块

您可能会发现,如果流程复杂,您可能希望查看控制反转,尽管它与主题无关,而且更高级,但它与代码如何链接在一起有关,我觉得这是您潜在的问题


如果要返回的值不止一个,则可以使用结构/类或将参数标记为ref,允许您从函数内部进行修改(变量通过引用传递,而不是通过默认值传递)。通常,您会从函数返回值。您需要考虑代码如何调用不同的模块

您可能会发现,如果流程复杂,您可能希望查看控制反转,尽管它与主题无关,而且更高级,但它与代码如何链接在一起有关,我觉得这是您潜在的问题



如果要返回多个值,可以使用结构/类或将参数标记为ref,允许您从函数内部进行修改(变量通过引用传递,而不是通过默认值传递)。

程序员实际上不需要创建
新值()
按照方法static@canpoyrazo奥卢,说得好。我会更新我的答案,包括这句话。谢谢各位,我得到了无效返回类型的错误。如果我将类型更改为string并返回getName,我会得到错误non-delegate type…非常感谢。在以前的项目中,我试图返回方法名,而不是“return Console.ReadLine()”。我认为合乎逻辑的说法是,您需要返回本地值,对吗?如果是输入值,则返回Console.ReadLine()。我希望我没有弄错。程序员实际上不需要像方法那样创建
新值()static@canpoyrazo奥卢,说得好。我会更新我的答案,包括这句话。谢谢各位,我得到了无效返回类型的错误。如果我将类型更改为string并返回getName,我会得到错误non-delegate type…非常感谢。在以前的项目中,我试图返回方法名,而不是“return Console.ReadLine()”。我认为合乎逻辑的说法是,您需要返回本地值,对吗?如果是输入值,则返回Console.ReadLine()。我希望我说得对。我想这就是让我困惑的地方。我注意到很多关于OUT和REF语句的说明,但是现在我想我对返回的内容没有一个清晰的理解。与返回Console.ReadLine()相比,我试图返回实际的方法名;我想这就是让我困惑的地方。我注意到很多关于OUT和REF语句的说明,但是现在我想我对返回的内容没有一个清晰的理解。与返回Console.ReadLine()相比,我试图返回实际的方法名;这也很有帮助,谢谢。我当前的项目是一个简单的登录控制台应用程序,我很可能不得不使用你的方法,因为我不想让值消失。本质上,行:公共字符串MyName{get;set;},只是一个“空容器”,对吗?@MikeB:它是带有支持变量的参数的缩写,即
私有字符串\u MyName;公共字符串MyName{get{return{u MyName;}set{{u MyName=value;}}
,但是私有支持变量有一个由编译器生成的秘密名称。确定这说明它是一个速记或快捷方式,但是编译器生成名称的目的只是作为一个空容器,可以随时调用它,而不是在方法中编译时被销毁。对吗?@MikeB:财产就是ob