using System;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!"); //输出HelloWorld
Console.ReadLine(); //从控制台输入
}
}
}
对于这一段代码,第一眼肯定感到熟悉又陌生,它和java程序有几分相似?下面就像剥洋葱一样,从外向里一层一层剥开来看代码的各个组成部分。
namespace关键字
namespace(命名空间)是C#中组织代码的方式,它的作用类似于Java中的package(包),这样我们就可以把紧密相关的一些代码放在同一个命名空间中,大大提高管理和使用的效率。在上面这段代码中,Visual Studio 自动以项目的名称“HelloWorld”作为这段程序命名空间的名称。
using关键字
在Java中,如果导入其他包,应该使用import关键字。而在C#中,使用using关键字来引用其他命名空间,它的作用和Java中的import类似。在上面这段代码生成时,Visual Studio 就已经自动添加了四条using语句。
class关键字
与Java一样,C#也是一种面向对象的语言,使用class关键字表示类。我们编写的代码都应该包含在一个类里面,类里面要包含在一个命名空间中,在程序模板生成时,Visual Studio 自动创建了一个类,名为Program。如果你不喜欢,可以改掉它。注意:C#与Java不同,不同求类名必须与源文件的名称语言。
Main()方法
C#中的Main()方法和Java中的main()方法作业一样的,是程序运行的入口,应用程序从这里开始运行。但要注意的是,C#中的Main()方法首字母必须是大写,Main()方法的返回值可以是void或者int类型,Main()方法可以没有命令行参数。因此,这样组合一下,C#中的Main()方法有四种形式。
语法:
static void Main(string[] args){}
static int Main(string[] args){}
static void Main(){}
static int Main(){}
当创建一个项目的时候,编译器会创建一个第一种形式的Main()方法。
注意:
编写程序的时候,一般会采用编译器自动生成的Main()方法,也可以根据需要修改成其他三种形式。例如,当Main()方法被调用时,如果希望通过命令行传递一些参数,可以采用带参数的Main()方法;当Main()方法执行结束后需要返回一个结果(如执行成功还是失败)时,可以采用有返回值的Main()方法。目前主要使用第一种形式,后三种形式在开发中遇到时可以通过查资料等方式进行学习。
关键代码
Main()方法中添加的两行代码就是这个小程序的关键代码,是用来输出和输入的。
Console.WriteLine("Hello World!"); //从控制台输入内容
Console.ReadLine(); //从控制台输入
C#与Java对比
- 组织代码的方式:C#使用命名空间(namespace),Java使用包(package)。
- 引入命名空间或包的关键字:C#使用using,Java使用import。
- 程序入口:C#的Main()有四种形式,Java的main()有一种形式。
C#中的数据类型
常用数据类型 | Java | C# | 举例 |
---|---|---|---|
整型 | int | int | 年龄 |
浮点型 | float | float | 成绩 |
双精度 | double | double | 圆周率 |
字符串型 | String | string | 姓名 |
布尔型 | boolean | bool | 是否是少数民族 |
注意:C#中布尔型的关键字与Java不同,使用bool,C#中字符串类型的关键字首字母是小写的。
在为浮点型变量赋值时,C#语言要求赋值数据必须以字母f或F结束。
C#中的变量
C#中的变量声明方与Java是相同的,使用下面所介绍的方式。
语法:
数据类型 变量名称;
C#的变量命名规则与Java也基本相同,只是“$”符号在C#中是不能使用的,因此变量命名规则可以简单总结为以下三条。
组成:52个英文字母(A~Z,a~z)、10个数字(0~9)、下划线(_),除此之外不能含有其他的字符。
开头:只能以字母或下划线开头。
不能使用的:不能是C#中的关键字
命名规范:
- 变量的名称要有意义,尽量用对应的英文命名,具有见名知意的作用。例如,一个变量代表姓名,不要使用aa、bb等,要使用name。
- 避免使用单个字符作为变量名,如a,b,c等,应该使用index、temp等,但循环变量除外。
- 当使用多个单词组成的变量名时,应该使用骆驼(Camel)命名法,即第一个单词的首字母小写,其他单词的首字母大写,如myName、youAge等。
C#中的常量
为什么使用常量?
我们来看一段代码,如下代码所示,这段代码是想把今天的星期数加1后输出,关注输出结果合逻辑是否正确。
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
intdayMax = 7; //每周的天数
int today = 1; //今天的星期数
Console.WriteLine("一周有几天:");
Console.WriteLine(dayMax); //输出天数
Console.WriteLine("今天是周:");
dayMax = dayMax +1;
Console.Writeline("dayMax")
}
}
}
分析:
根据以上代码,现在有一个问题出现了,把today = today + 1 写成了 dayMax = dayMax + 1,导致程序输出的结果是周8,这与现实不符。那如何避免这种误操作呢?可以使用常量来解决。
什么是常量?
常量结束在程序运行的过程中保持不变的值,例如,在代码中 dayMax 表示一周的天数,应该是不变的,就可以定义为常量。常量定义的语法如下。
语法:
const数据类型常量名称 = 值;
例如:
public const int dayMax = 7; //定义常量dayMax
问题:
当给 dayMax 加上 const 关键字以后,再次启动程序,结果会怎么样呢?其错误会显示:赋值号左边必须是变量、属性或索引器。
分析:
常量在在程序的运行过程中不会发生变化的量。如果在程序中强制修改它的值,就会发生错误。如果想修改程序中的一个常量的值,只能在定义时修改。就这样保证了 dayMax 不会被误操作。
常量命名规范如下:
- 常量名称必须具有一定的实际意义。
- 常量的名称最好以大写字母来命名,中间可根据意义的连接性用下划线做连接,每个常量定义的右侧最好有简单的注释,说明其作用。
- 常量的名称长度最好不要成功25个字符,否则可读性差。
如何使用常量?
using System;
namespace radius
{
class Program
{
static void Main(string[] args)
{
const double Pl = 3.1415926;
int r = 5;
double girth = 2 * Pl * r;
double area = Pl * r * r;
Console.Write("圆的周长是:");
Console.WriteLine(girth);
Console.Write("圆的面积是:");
Console.WriteLine(area);
Console.ReadLine();
}
}
}
输出结果如下:
圆的周长是:31.415926
圆的面积是:78.539815
何时使用常量?
常量在程序中是经常使用的,那么在什么情况下要使用常量呢?
用于在程序中一但设定了就不允许被修改的值。例如,圆周率的值在整个程序范围内一般是不能随意修改的。
用于在程序中被经常引用的值。例如,某个错误消息在程序中可能多处被引用,就可以把它定义为常量。
用于程序中具有特定含义的值。例如,在程序中,使用1表示登入状态,0表示未登入状态,此时就可以定义两个有实际意义的常量分别表示登入和未登入两个状态。
Console类
Console.WriteLine("Hello world");
Console.ReadLine();
在里面的Console是C#中的控制台类,利用它能很方便得进行控制台的输入/输出。常用的输出方法有两个:Console.WriteLine( );
和Console.Write( )
。它们的唯一区别就是前者在输出后换行,后者输出后不换行。常用的输入方法有Console.ReadLine( );
,该方法返回string类型。
C#向控制台输出
向控制台输出的几种方式
Console.WriteLine(); // 相当于换行
Console.WriteLine(要输出的值); // 输出一个值
Console.WriteLine("格式字符串", 变量列表);
示例:
Console.WriteLine ("Hello World");
string course = "C#";
Console.WriteLine(course);
Console.WriteLine("我的课程名称是:" + course);
Console.WriteLine("我的课程名称是:{0}",course);
读取一行并返回字符串(string) 类型
Console.ReadLine( );
读取整数
int.Parse (Console.ReadLine()); //将字符串转换为整数
当输入的是非数字字符串时,程序将报错(如“a”等)
示例:
string name = Console.ReadLine( );
int age = int.Parse (Console.ReadLine());
练习 输入输出
需求说明
从控制台输入一位QQ用户的昵称和等级数,分别以+连接和占位符形式输出
代码:
using System;
namespace output
{
class Program
{
static void Main(string[] args)
{
//提示用户输入名称
Console.WriteLine("请输入昵称:");
//存储用户输入的名称到 string类型的变量里(userName)将字符串转换为整数
string userName = Console.ReadLine();
//提示用户输入等级
Console.WriteLine("请输入QQ等级");
//存储用户输入的等级到 int类型的变量里(grade)读取整数
int grade = int.Parse(Console.ReadLine());
//提示用户使用加号连接输出
Console.WriteLine("使用加号连接输出:");
//输出结果
Console.WriteLine(userName + "您好!您的等级是:" + grade);
Console.WriteLine("使用格式字符串输出:");
Console.WriteLine("{0}您好!您的等级是:{1}", userName, grade);
Console.ReadLine();
}
}
}
类和对象
用类和对象修改示例:
public class Student
{
public string name;
public int age;
public void Show()
{
Console.WriteLine("学生姓名:{0},年龄:{1}", name, age);
Console.ReadLine();
}
}
- name、age:成员变量也叫字段
- Show():方法
操作Student类的字段和方法
static void Main(string[] args)
{
//实例化对象
Student student = new Student();
Console.WriteLine("请输入姓名:");
//给字段赋值
student.name = Console.ReadLine();
Console.WriteLine("请输入年龄:");
student.age =
int.Parse(Console.ReadLine());
//调用方法
student.Show();
}
Student student = new Student();
- Student:类
- student:对象
回顾:什么是方法?使用方法有什么好处?
类的行为,便于修改、增加可读性、可重用、封装…
C# 中方法的定义形式
访问修饰符 返回类型 方法名 ( 参数列表 )
{
// 方法的主体…
}
- public private :访问修饰符
- int、double、string、void.... :返回值类型
- 方法名:命名规范:单词首字母大写 Pascal命名法
练习 求两个数的和
需求说明
新建求和类,在该类中添加两个数据成员代表相加的两个数,再添加一个自定义方法实现求和功能
代码:
using System;
namespace sum
{
class Program
{
#region 求和
static void Main(string[] args)
{
//声明double类型的变量
double num1,num2,num;
//提示用户输入第一个数
Console.WriteLine("请输入第一个数:");
//存储用户输入的数转换成 dobule类型的变量(num1)获取用户输入内容
num1 = Convert.ToDouble(Console.ReadLine());
//提示用户输入第二个数
Console.WriteLine("请输入第二个数");
//存储用户输入的数转换成 dobule类型的变量(num2)获取用户输入内容
num2 = Convert.ToDouble(Console.ReadLine());
//输出结果
Console.WriteLine("第一个数字{0}和第二个数字{1}的和是:{2}", num1,num2,num1 + num2);
Console.ReadKey();
}
}
#endregion
}
练习 MyBank系统的开户业务
练习要点
- 输入和输出
- 类的创建
- 自定义方法和方法调用
需求说明
从控制台接收输入的账号姓名、密码、身份证号和开户金额,程序为账号指定一个固定值(如 179708064356),使用格式字符串输出账号开户信息。
实现思路及关键代码
- 创建User类并添加有关账号信息的字段,使用double类型定义存款金额
- 创建Bank类并添加“开户”方法
- 使用
double.Pars()
转换从控制台接收的存款金额数 - 在
Main()
里调用Bank类中的自定义方法实现开户 - 使用
Console.WriteLine("格式字符串",变量列表)
输出开户信息
Program类
using System;
namespace MyBank
{
class Program
{
static void Main(string[] args)
{
//实例化Bank对象并赋值
Bank bank = new Bank();
//开户 进入方法
bank.CreateAccount();
}
}
}
User类
using System;
using System.Collections.Generic;
using System.Text;
namespace MyBank
{
class User
{
//用户名
public string _name;
//密码
public string _password;
//身份证号
public string _identityNum;
//账号余额
public double _balance;
//账号
public string _account;
}
}
Bank类
using System;
using System.Collections.Generic;
using System.Text;
namespace MyBank
{
/// <summary>
/// 银行类
/// </summary>
class Bank
{
/// <summary>
/// 创建账户
/// </summary>
public void CreateAccount()
{
//实例化User对象并赋值
User user = new User();
//接受输入的数据
Console.WriteLine("请输入用户名");
user._name = Console.ReadLine();
user._account = "179708064356";
Console.WriteLine("请输入用户密码");
user._password = Console.ReadLine();
Console.WriteLine("请输入用户身份证号");
user._identityNum = Console.ReadLine();
Console.WriteLine("请输入用户存款金额");
user._balance = double.Parse(Console.ReadLine());
Console.WriteLine("账号:{0},用户名:{1},存款金额:{2},创建成功!", user._account, user._name, user._balance);
Console.ReadLine();
}
}
}