在控制台应用程序的Console.Write方法和Console.WriteLine方法的参数中,可以直接定义数据转换为字符串后的输出格式。常用形式为
Console.WriteLine("格式化表示", 参数序列);
或者
Console.Write("格式化表示", 参数序列);
带下画线的斜体字表示需要用具体内容替换。例如:
int x=10, y=20, z=30;
Console.WriteLine("{0}+{1}+{2}={3}", x, y, z, x+y+z); //输出10+20+30=60
Console.WriteLine("{3}={1}+{2}+{0}", x, y, z, x+y+z); //输出60=20+30+10
1.格式化表示的一般形式
使用格式化表示时,用“{”和“}”将格式与其他输出字符区分开。一般形式为:
{N [, M][:格式码]}
格式中的中括号表示其内容为可选项。
假如参数序列为x、y、z,格式中的含义如下。
● N:指定参数序列中的输出序号。例如{0}表示x,{1}表示y,{2}表示z。
● M:指定参数输出的最小长度,如果参数的长度小于M,就用空格填充;如果大于等于M,则按实际长度输出;如果M为负,则左对齐;如果M为正,则右对齐;如果未指定M,默认为零。例如{1,5}表示将参数y的值转换为字符串后按5位右对齐输出。
● 格式码:为可选的格式化代码字符串。例如{1:00000}的输出结果为 00020,含义是将参数y按5位数字输出,不够5位左边补零,超过5位按实际位数输出。
表1-1列出了常用的格式码及其用法示例。
表1-1 常用格式码
在格式化表示形式中,有两个特殊的用法:
● 如果恰好在格式中也要使用大括号,可以用连续的两个大括号表示一个大括号,例如“{{、}}”。
● 如果希望格式中的字符或字符串包含与格式符相同的字符,但是又希望让其原样显示时,可以用单引号将其括起来。
2.利用string.Format方法格式化字符串
也可以利用string.Format方法将某种类型的数据按照希望的格式转换为对应的字符串,该方法既可以在控制台应用程序中使用,也可以在其他应用程序中使用。例如:
int i = 123;
string s = string.Format("{0:d6}", i); //d6表示不够6位左边补零
Console.WriteLine(s); //结果为000123
double j = 123.45;
//下面的{0,-7}表示第0个参数左对齐,占7位,不够7位右边补空格
// {1,7}表示第1个参数右对齐,占7位,不够7位左边补空格
string s2 = string.Format("i:{0,-7}, j:{1,7}", i, j);
Console.WriteLine(s2); //结果i:123 ,j: 123.45
string s3 = string.Format("{0:###,###.00}", i);
Console.WriteLine(s3); //结果12.00
int num = 0;
string s4 = string.Format("{0:###}", num);
Console.WriteLine(s4); //结果输出长度为0的空字符串
3.利用ToString方法格式化字符串
如果是一个变量,使用ToString方法更简单。例如:
int n1 = 12;
string s1 = n1.ToString("X4"); //X格式表示用十六进制输出。结果为:000C
string s2 = n1.ToString("d5"); //结果:00012
不论是控制台应用程序,还是 WinForm 应用程序、WPF 应用程序,或是其他类型的应用程序,都可以利用string.Format方法或者ToString方法定义数据的格式。
4.控制台应用程序示例
下面通过例子说明控制台应用程序的基本设计方法。
【例 1-1】演示控制台应用程序的基本设计方法,以及如何在一个解决方案中包含多个应用程序项目。
该例子的功能是让用户从键盘输入任意两个整数 x 和 y,程序自动计算这两个数的乘积(z = x*y),并将计算结果 z 在屏幕上显示出来。这个例子虽然非常简单,但却能让我们快速了解基本的应用程序编程思路和方法。
(1)运行 VS2012,单击【新建项目】按钮,在弹出的窗体中,选择【控制台应用程序】模板,将【名称】改为 ConsoleExamples ,将【位置】改为希望存放的文件夹位置(本例子为E:\V3CSharp\ch01),将【解决方案名称】改为ch01,如图1-2所示。单击【确定】按钮。
图1-2 创建控制台应用程序项目
(2)观察【解决方案资源管理器】中的项目组织,此时会发现在 ch01 解决方案下有一个ConsoleExamples项目。
(3)将Program.cs的Main方法改为下面的代码。
static void Main(string[] args)
{
Console.Write("请输入x和y(例如12,15),然后按回车键:");
string s = Console.ReadLine();
string[] a = s.Split(',');
int x = int.Parse(a[0]);
int y = int.Parse(a[1]);
int z = x * y;
Console.WriteLine("x*y={0}", z);
Console.WriteLine("请按任意键结束程序。");
Console.ReadKey();
}
当然,该例子目前的实现代码有很多缺陷,比如,没有对输入数据的格式和合法性进行检查,没有对数据转换失败的异常情况进行处理等。在后面的章节中,我们还会逐步学习解决这些问题的办法。
(4)按<F5>键调试运行,效果如图1-3所示。
图1-3 例1-1的运行效果
(5)按任意键结束程序运行,然后退出 VS2012 开发环境,观察解决方案文件夹下生成的所有文件和子目录,以及子目录下包含的文件。
此时可发现在ch01子目录下,有一个ch01.sln文件,以后需要再次打开这个解决方案时,双击该文件即可。
备份项目时,应该将解决方案文件夹下的所有文件和子目录全部复制到U盘或者移动硬盘中,不能只复制其中的一部分文件,否则将无法正常打开该解决方案。
(6)观察bin\Debug子目录下的文件,可发现在该文件夹下有一个ConsoleExamples.exe文件,这就是项目生成的可执行文件。
(7)将ConsoleExamples.exe文件复制到其他文件夹,如复制到桌面上,双击该文件再次运行观察结果。这一步的目的是为了让读者明白,安装到用户机器上时实际上只需要这一个可执行文件即可,其他都是帮助调试用的文件。
实际发布项目时,一般不再使用调试方式,而是通过修改快捷工具栏中的解决方案配置,将其生成到bin\release子目录下。
下面我们将其改为在DLL文件中实现运算。
(8)双击ch01.sln打开解决方案。
(9)在【解决方案资源管理器】中,鼠标右击解决方案名,选择【添加】→【新建项目】命令,在弹出的窗体中,选择【类库】模板,将【名称】改为ClassLibraryExample,然后单击【确定】按钮。
(10)在“解决方案资源管理器”中,将 Class1.cs 换名为 MyClass.cs,然后将代码改为下面的内容。
namespace ClassLibraryExample
{
public class MyClass
{
public int Multiplication(int x, int y)
{
int z = x * y;
return z;
}
}
}
(11)鼠标右击解决方案名,选择“重新生成解决方案”,此时在ClassLibraryExample项目的bin\Debug文件夹下即生成了ClassLibraryExample.dll文件。
(12)在【解决方案资源管理器】中,鼠标右击ConsoleExamples项目,在快捷菜单中选择【项目依赖项】命令,在弹出的对话框中,勾选ClassLibraryExample选项,单击【确定】按钮。
(13)鼠标右击 ConsoleExamples 项目的【引用】,选择【添加引用】命令,在弹出的对话框中,勾选ClassLibraryExample选项,单击【确定】按钮。
(14)将Main 方法的int z = x * y;用下面的语句替换。
int z = ClassLibraryExample.MyClass.Multiplication(x, y);
(15)按<F5>键运行应用程序,观察运行效果。
(16)再次观察ConsoleExamples项目目录下的bin\Debug子目录下的文件,此时会发现该子目录下既有ConsoleExamples.exe文件,又有ClassLibraryExample.dll文件。
到此,我们了解了用C#调用DLL文件的基本用法。
如果读者学过C++或者Java语言,还可以比较一下C#与这些语言编写的程序有哪些相似和不同之处,从而对C#编程有一个直观的感性认识。