如何将变量从私有方法获取到静态方法
本文关键字:有方法 获取 静态方法 变量 | 更新日期: 2023-09-27 17:59:25
在方法nameCheck
中,我只是检查是否给出了任何输入。
起初我尝试将方法更改为static
并创建了一个public
变量,但后来我意识到它不起作用,因为 Main 方法static
所以name
不起作用。我在网上搜索并意识到,我没有对象可以使用nameCheck
所以我解决了这个问题。
现在我不知道如何在方法中获取方法string
nameCheck
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();
}
}
}
On nameCheck
:
n = Console.ReadLine();
这只会改变局部变量的值 n
.
即使您将方法更改为static
,也不会得到预期的结果。
为此,您需要返回新字符串:
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"中返回你的值
在您的主方法中尝试此操作:
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;
}
不是真正的答案,而是一些一般提示:
Program
是一个相当普遍的名字。这有效地反映了您的整个程序。
C# 是面向对象的,但这并不意味着你可以只将所有内容都变成一个对象并添加函数。访问修饰符和static
各有其用途。
您的类Program
有一个私有方法nameCheck
。您是否问过自己为什么private
或为什么不static
而是实例方法?
C# 编译器允许这样做,但你没有完全正确理解语义。
由于nameCheck
是一种完全无状态的方法,因此您宁愿将其定义为static
。另外,将Program
更改为实际上反映您的意图的内容。
另一种方式(以及更好的 OO 方法,IMO(是拥有一个像 Name
这样的类,其中包含一个 string
数据成员的名称和一个方法nameCheck
。Main
方法可以知道实例化类并根据需要调用nameCheck
。
我建议重新审视OOP的基础知识并阅读它,尤其是封装。
更改方法名称的返回类型签入字符串。然后像我一样从主方法调用它
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;
}
要从您的姓名返回字符串检查 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
}
所以现在在你的程序中.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();
}
机会回答你的问题。
定义使用ref
直接更改传递的字符串的方法:
private void nameCheck(ref string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
}
这样称呼它:
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))
而不是检查=="
。
问题是 nameCheck 不返回任何内容(返回类型为 void
(。
请尝试以下操作:
private string nameCheck(string n)
{
if (n == "")
{
Console.WriteLine("Geben Sie einen Namen ein");
n = Console.ReadLine();
}
return n;
}
然后你需要改变
a.nameCheck(name);
自
name = a.nameCheck(name);
最好阅读返回类型和指针 - 尝试为它们找到一个好的教程。