C# 控制台程序,其中包含一个常量静态字段,用于在输出主方法中显示文本

Posted

技术标签:

【中文标题】C# 控制台程序,其中包含一个常量静态字段,用于在输出主方法中显示文本【英文标题】:C# Console program that contains a constant static field to display text in the output main method 【发布时间】:2012-07-01 18:40:19 【问题描述】:

在 MicroSoft Visual Studio 2010 中使用 C# 作为控制台程序,在你们的帮助下,我对此进行了一些更改,并且该控制台程序运行正常;但是我需要实现一个常量静态字段,该字段将在 main 方法的输出部分显示座右铭“遵守女童子军法”。我知道这一定很简单,所以请多多包涵。当我在低音类中包含 public static const string Motto = "To Obey the Girl Scout Law" 时,我收到一条错误消息 - 常量 'DemoScouts.GirlScout.Motto' 不能是静态的。以下是本项目的完整代码:

公开课 GirlScout

    public static const string Motto = "To Obey the Girl Scout Law";  

    public static string scoutName;
    public static string enterName()
    
        return scoutName;
    

    public static int duesOwed;
    public static int enterAmount()
    
        return duesOwed;
    

    public static int troopNumber;
    public static int enterNumber()
    
        return troopNumber;
    


class MainClass : GirlScout

    static void Main()
    
        Console.WriteLine();
        Console.Write("Enter the Girl Scout's name: ");
        GirlScout.scoutName = Console.ReadLine();
        Console.WriteLine();

        Console.Write("Enter their Troop Number: ");
        string n = Console.ReadLine();
        GirlScout.troopNumber = Int32.Parse(n);
        GirlScout.enterNumber();
        Console.WriteLine();

        Console.Write("Enter the amount they Owe in Dues: $");
        string d = Console.ReadLine();
        GirlScout.duesOwed = Int32.Parse(d);
        GirlScout.enterAmount();
        Console.WriteLine();

        // Seperate the input from the output:
        Console.WriteLine();
        Console.WriteLine(GirlScout.Motto);
        Console.WriteLine("-----------------------------------------------");
        Console.WriteLine();

        // Display the new information:
        Console.WriteLine("The name of the Girl Scout is: 0", GirlScout.scoutName);
        Console.WriteLine("The troop Number of the Girl Scout is:   0", GirlScout.troopNumber);
        Console.WriteLine("The amount of Dues Owed by this Girl Scout is: 0", GirlScout.duesOwed);

        // Keep the console window open in debug mode.
        Console.ReadKey();
    

我们将不胜感激任何和所有建议。

【问题讨论】:

【参考方案1】:

您没有对用户输入的名称进行任何操作:

Console.Write("Enter the Girl Scout's name: ");
Console.ReadLine();

应该是这样的:

Console.Write("Enter the Girl Scout's name: ");
GirlScout.scoutName = Console.ReadLine();

您还需要将scoutName 的类型更改为string 而不是int


您还应该重新设计您的课程。使用实例属性而不是静态字段。

public class GirlScout

    public string Motto  get; set; 
    public string ScoutName  get; set; 
    public int DuesOwed  get; set; 
    public int TroopNumber  get; set; 

【讨论】:

还有一个简单的问题,我怎样才能将“遵守女童子军法”的座右铭作为一个常量静态字段并让它在 main 方法的输出之前自动显示? 我也是这么想的,但是这个任务要求这个?我只是使用一个常量字符串来运行它。感谢您的意见。 根据定义,一个 const 字符串是静态的;它并不特定于类的实例。 Eric Lippert 在他的博客上详细讨论了这一点:Consts are already static。【参考方案2】:

您不会像存储其他数据那样存储用户输入的名称。

【讨论】:

【参考方案3】:

我没有看到分配给 GirlScout.scoutName...

旁注:请考虑不要使用静态属性(除非它是分配的目标)。要么创建具有普通属性的对象,要么根本不使用它们......

【讨论】:

附注中的好建议【参考方案4】:

好吧,您从未初始化 scoutName 的值,那么您希望打印什么?

我认为您缺少这样的一行代码:

GirlScout.scoutName = Console.ReadLine();

不过,我不得不说,你的课程设计得很糟糕。你有公共数据成员,你的方法似乎没有目的或意义——你应该重温封装,并使你的变量私有。使用方法来更改/获取它们的值。

如果您需要任何帮助,请在 cmets 或其他问题中提问。

【讨论】:

嘿,Daniel,我将如何使用一个常量静态字段,从该字段可以在 main 方法的输出中显示座右铭“To Obey the Girl Scout Law”。 public static const string Motto = "To Obey.."; Console.WriteLine(GirlsScout.Motto); 我收到错误消息:error#1 - Invalid token '('in class, struct, or interface member declaration error#2 - Invalid token ')'in class, struct, or interface member声明错误#3 - 'System.Console.WriteLine(string, params object[])' 是“方法”,但用作“类型”,错误 #4 - 'DemoScouts.GirlScout.Motto' 是“字段”但用作“类型” 上面的代码我还有,只是不知道你刚才提供给我的代码会放在哪里。 哦.. 第一行 (The public static const string Motto = "..") 进入你的类,而 Console.WriteLine 行进入 Main 方法。

以上是关于C# 控制台程序,其中包含一个常量静态字段,用于在输出主方法中显示文本的主要内容,如果未能解决你的问题,请参考以下文章

C#各种字段类型对比

C#进阶系列07 常量和字段

C#图解教程 第六章 深入理解类

静态字段静态函数成员常量

C# 常量,变量,字段,属性,方法

[c#] const 与 readonly