【问题标题】:Functions Error C#?函数错误 C#?
【发布时间】:2013-04-25 21:42:37
【问题描述】:

我有两个用户定义的函数(WriteFunction)和(ReadFunction),第二个函数(ReadFunction)有一个错误,即当前上下文中不存在关键字。 (在姓名、ID、年龄、电子邮件下划线。)

这里是完整的代码:

//First Function
public static void WriteFunction()
    {

        int count = 0;
        while (count < 10)
        {
            Console.Write(" Enter your Name: ");
            string Name = Console.ReadLine();

            Console.Write(" Enter your ID: ");
            int ID = int.Parse(Console.ReadLine());

            Console.Write(" Enter your Age: ");
            int Age = int.Parse(Console.ReadLine());

            Console.Write(" Enter your E-mail: ");
            string Email = Console.ReadLine();

            count++;
        }

    }
    //Second Function
    public static void ReadFunction()
    {
        string output = string.Format("Thank you for registration! Your Submitted information are:" + Environment.NewLine + "Name: {0}"
        + Environment.NewLine + "ID: {1}" + Environment.NewLine + "Age: {2}" + Environment.NewLine + "E-mail: {3}", Name, ID, Age, Email);
        // I using the Environment.NewLine to insert new lines
        Console.WriteLine(output);

    }

等待您的答复。谢谢。

【问题讨论】:

  • 它们超出了范围。您需要在这些函数之外将这些变量声明为静态变量。
  • 阅读一些初级 C# 教程可能对你有很大帮助。

标签: c# function methods


【解决方案1】:

C# 在很大程度上是一种面向对象的语言。除其他外,状态被存储为对象的成员变量。

因此,正如@LarsTech 所指出的,您的NameIDAgeEmail 都是该方法的局部变量。要使它们可用于其他方法,您需要将它们移出成为类的字段。

public class MyFunctions
{
    private static string _name;
    private static int _id;
    private static int _age;
    private static string _email;

    public static void WriteFunction()
    {

        int count = 0;
        while (count < 10)
        {
            Console.Write(" Enter your Name: ");
            _name = Console.ReadLine();

            Console.Write(" Enter your ID: ");
            _id = int.Parse(Console.ReadLine());

            Console.Write(" Enter your Age: ");
            _age = int.Parse(Console.ReadLine());

            Console.Write(" Enter your E-mail: ");
            _email = Console.ReadLine();

            count++;
        }

    }

    public static void ReadFunction()
    {
        string output =
            string.Format(
                "Thank you for registration! Your Submitted information are:" + Environment.NewLine +
                "Name: {0}"
                + Environment.NewLine + "ID: {1}" + Environment.NewLine + "Age: {2}" + Environment.NewLine +
                "E-mail: {3}", _name, _id, _age, _email);
        // I using the Environment.NewLine to insert new lines
        Console.WriteLine(output);
    }
}

虽然我本可以保留名称,但我更改了它们以更好地反映私有变量的 C# 约定。

【讨论】:

  • 把你的邮件发给 OP,这样你就可以轻松写出他/她的所有作业了 :)
  • 至少去掉那个丑陋的下划线:)
  • @Silvermind 我倾向于同意你的观点。 @LarsTech 引用的约定包括下划线。在我工作的地方,他们仍然需要m_
【解决方案2】:

您真的应该阅读 OOP 教程,因为如果您想继续使用 C#,它是最基本的概念之一。

至于您的问题,如果我只是简单地重写您的整个代码以使其按您想要的方式工作(因为是的,它需要更改),这将无济于事。我强烈建议您阅读有关 OOP 的内容,并在深入了解它之前尝试了解它的工作原理。

在您的示例中,您说您希望 ReadFunction() 继承自 WriteFunction()。这里有几件事:

您应该以良好的步伐开始。同样,仅通过查看您的方法的名称,我们就可以知道它们可能不打算相互继承(暗示有类)。也许是这样的:

Parent Class : InformationManager 

Child  Class : ReadInformation inherits InformationManager
Child  Class : WriteInformation inherits InformationManager

【讨论】:

    【解决方案3】:

    静态事物(变量、方法、属性)不能被继承。 这是设计使然,我建议您阅读一些 c# 书籍以正确理解此概念和其他概念。

    对于您的问题,在第一种方法中,将静态替换为虚拟。 在第二个函数中,用覆盖替换静态。

    virtual 告诉编译器方法是可继承的,override 告诉编译器方法实际上是继承的

    【讨论】:

      猜你喜欢
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 2016-11-29
      • 2012-10-10
      • 2015-06-22
      • 1970-01-01
      • 2016-08-12
      相关资源
      最近更新 更多