C# 如何从私有方法到静态方法获取变量?
在方法C# 如何从私有方法到静态方法获取变量?,c#,methods,console-application,C#,Methods,Console Application,在方法nameCheck中,我只是检查是否给出了任何输入 起初我尝试将方法更改为static,并创建了一个public变量,但后来我意识到它无法工作,因为主要方法是static,所以name无法工作。我在网上搜索发现,我没有可以使用的对象namecheak,所以我解决了这个问题 现在我不知道如何将方法nameCheck中的string获取到我的Main方法中的string class Program { static void Main(string[] args)
nameCheck
中,我只是检查是否给出了任何输入
起初我尝试将方法更改为static
,并创建了一个public
变量,但后来我意识到它无法工作,因为主要方法是static
,所以name
无法工作。我在网上搜索发现,我没有可以使用的对象namecheak
,所以我解决了这个问题
现在我不知道如何将方法nameCheck
中的string
获取到我的Main
方法中的string
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hallo, wie heißt du?");
string name = Console.ReadLine();
Program a = new Program();
a.nameCheck(name);
Console.WriteLine("Hallo " + name);
Console.ReadLine();
}
private void nameCheck(string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
}
}
您必须在方法“nameCheck”中返回值 尝试以下主要方法:
Program a = new Program();
name = a.nameCheck(name);
您的nameCheck()方法应如下所示:
private string nameCheck(string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
return n;
}
nameCheck(ref name);
您必须在方法“nameCheck”中返回值 尝试以下主要方法:
Program a = new Program();
name = a.nameCheck(name);
您的nameCheck()方法应如下所示:
private string nameCheck(string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
return n;
}
nameCheck(ref name);
在
名称检查中
:
n = Console.ReadLine();
这只是要更改局部变量n
的值
即使将方法更改为静态
,也不会得到预期的结果
要使其工作,您需要返回新字符串:
private string nameCheck(string n)
{
if (String.IsNullOrEmpty(n))
{
Console.WriteLine("Geben Sie einen Namen ein")
n = Console.ReadLine();
}
return n;
}
然后更改Main
方法:
Program a = new Program();
name = a.nameCheck(name);
在
名称检查中
:
n = Console.ReadLine();
这只是要更改局部变量n
的值
即使将方法更改为静态
,也不会得到预期的结果
要使其工作,您需要返回新字符串:
private string nameCheck(string n)
{
if (String.IsNullOrEmpty(n))
{
Console.WriteLine("Geben Sie einen Namen ein")
n = Console.ReadLine();
}
return n;
}
然后更改Main
方法:
Program a = new Program();
name = a.nameCheck(name);
将方法nameCheck的返回类型更改为字符串。然后像我一样从main方法调用它
Console.WriteLine("Hallo, wie heißt du?");
string name = Console.ReadLine();
Program a = new Program();
string n=a.nameCheck(name);
Console.WriteLine("Hallo " + n);
Console.ReadLine();
private string nameCheck(string n)
{
if (n == "")
{
// Console.WriteLine("Geben Sie einen Namen ein");
return "Geben Sie einen Namen ein";
}
return n;
}
将方法nameCheck的返回类型更改为字符串。然后像我一样从main方法调用它
Console.WriteLine("Hallo, wie heißt du?");
string name = Console.ReadLine();
Program a = new Program();
string n=a.nameCheck(name);
Console.WriteLine("Hallo " + n);
Console.ReadLine();
private string nameCheck(string n)
{
if (n == "")
{
// Console.WriteLine("Geben Sie einen Namen ein");
return "Geben Sie einen Namen ein";
}
return n;
}
你有很多机会回答你的问题 使用
ref
定义直接更改传递字符串的方法:
private void nameCheck(ref string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
}
可以这样称呼:
private string nameCheck(string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
return n;
}
nameCheck(ref name);
第二个将您的方法更改为非静态并使用成员变量:
class program
{
private string name;
Main()
{
//...
Program p = new Program();
p.Name = p.checkName();
}
private void nameCheck()
{
if (this.name == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
this.name = Console.ReadLine();
}
}
}
第三个方法使用返回值:
class program
{
Main()
{
//...
Program p = new Program();
string name = ...
name = p.checkName(name);
}
private string nameCheck(string name)
{
if (name == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
name = Console.ReadLine();
}
return name;
}
}
作为一个旁侧,考虑使用<代码> If(String,IsNullOrEmpty(name))< /C> >而不是检查<代码> =“ .< /P> > p>您有很多问题的机会。
使用ref
定义直接更改传递字符串的方法:
private void nameCheck(ref string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
}
可以这样称呼:
private string nameCheck(string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
return n;
}
nameCheck(ref name);
第二个将您的方法更改为非静态并使用成员变量:
class program
{
private string name;
Main()
{
//...
Program p = new Program();
p.Name = p.checkName();
}
private void nameCheck()
{
if (this.name == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
this.name = Console.ReadLine();
}
}
}
第三个方法使用返回值:
class program
{
Main()
{
//...
Program p = new Program();
string name = ...
name = p.checkName(name);
}
private string nameCheck(string name)
{
if (name == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
name = Console.ReadLine();
}
return name;
}
}
作为一个旁侧,考虑使用<代码> IF(String,IsNullOrEmpty(name))< /COD>,而不是检查<代码> = =“< /代码> . 问题是nameCheck不返回任何内容(返回类型为
void
)
请尝试以下操作:
private string nameCheck(string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
return n;
}
然后你需要改变
a.nameCheck(name);
到
最好阅读关于返回类型和指针的内容-尝试为这些内容找到一个好的教程。问题是nameCheck没有返回任何内容(返回类型是
void
)
请尝试以下操作:
private string nameCheck(string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
return n;
}
然后你需要改变
a.nameCheck(name);
到
最好阅读返回类型和指针的相关内容-尝试为这些内容找到一个好的教程。要从nameCheck void返回字符串,实际上需要将它从一个void转换为一个字符串,以便
private string nameChech(string input)
{
if(string.IsNullOrWhiteSpace(input))
return string.Empty;
/* other checking code */
return input // you can do any string that may have been altered/appended/etc
}
所以现在在你的program.cs中你可以做到了
static void Main(string[] args)
{
Console.WriteLine("Hallo, wie heißt du?");
string name = nameCheck(console.ReadLine());
if (name == string.Empty)
{
console.WriteLine(/* no name provided */);
return;
}
/* other checking code */
Program a = new Program();
Console.WriteLine("Hallo " + name);
Console.ReadLine();
}
要从nameCheck void返回字符串,实际上需要将它从一个void转换为一个字符串,以便
private string nameChech(string input)
{
if(string.IsNullOrWhiteSpace(input))
return string.Empty;
/* other checking code */
return input // you can do any string that may have been altered/appended/etc
}
所以现在在你的program.cs中你可以做到了
static void Main(string[] args)
{
Console.WriteLine("Hallo, wie heißt du?");
string name = nameCheck(console.ReadLine());
if (name == string.Empty)
{
console.WriteLine(/* no name provided */);
return;
}
/* other checking code */
Program a = new Program();
Console.WriteLine("Hallo " + name);
Console.ReadLine();
}
这不是一个真正的答案,而是一些一般性的提示:
程序
是一个非常普遍的名称。这有效地反映了你的整个计划
C#是面向对象的,但这并不意味着你可以把所有东西都变成一个对象并添加函数。访问修饰符和静态
各有其用途
您的类程序
有一个私有方法名称检查
。你有没有问过自己为什么private
或者为什么不是static
而是一个实例方法?C#编译器允许这样做,但您没有完全正确地理解语义 由于
nameCheck
是一种完全无状态的方法,因此您宁愿定义它static
。另外,将程序
更改为实际反映您意图的内容另一种方法(更好的OO方法,IMO)是使用一个类似于
Name
的类,使用string
数据成员作为名称,使用方法nameCheck
。Main
方法可以根据需要实例化类并调用nameCheck
我建议重温OOP的基础知识,并仔细阅读它,尤其是封装。这不是一个真正的答案,而是一些一般性的技巧:
程序
是一个非常普遍的名称。这有效地反映了你的整个计划
C#是面向对象的,但这并不意味着你可以把所有东西都变成一个对象并添加函数。访问修饰符和静态
各有其用途
您的类程序
有一个私有方法名称检查
。你有没有问过自己为什么private
或者为什么不是static
而是一个实例方法?C#编译器允许这样做,但您没有完全正确地理解语义 由于
nameCheck
是一种完全无状态的方法,因此您宁愿定义它static
。另外,将程序
更改为实际反映您意图的内容另一种方法(更好的OO方法,IMO)是使用一个类似于
Name
的类,使用string
数据成员作为名称,使用方法nameCheck
。Main
方法可以根据需要实例化类并调用nameCheck
我建议你重新开始