1、 控制台成员:Console.Write()不换行Console.WriteLine()换行
Console.Read()不换行返回值是int类型,读取一个字符,Console.ReadLine()换行,返回值是string类型,读取一行,Console.ReadKey()获取用户按下的下一个字符或功能键。按下的键显示在控制台窗口中。
2、 数据类型:包括内置数据类型、用户自定义类型、匿名类型
在类中静态的成员是属于类的,非静态的成员是属于对象的
只读字段readonly在构造函数中是可以改变的,而常量Const是一成不变的。
3、 控制台小钢琴:
4、 命名规则:(1)匈牙利命名规则:变量名=属性+类型+对象描述
(2)驼峰命名规则:第一个单词首字母小写后面单词首字母大写
(3)帕斯卡命名规则:每个单词首字母大写
5、值类型包括简单类型、枚举类型、结构类型,引用类型包括类类型、接口类型、Unikode字符串类型、数组类型、委托类型
(1)值类型实例:static void Main(string[] args)
{
int a = 5; // 给a赋值5
int b = a; // 把a赋给b
b = 10; // 给b赋值10
Console.WriteLine(a); // 把a的值输出,查看的变化是否影响
}
结果:5
原理:
在线程堆栈中给a赋值为5,把a赋给b时不是地址而是把值传给b,这样再给b赋值时并不影响a的值。
(2)引用类型实例:static void Main(string[] args)
{
int[] Array_a =new int[]{5}; // 定义一个数组,有一个无素5
int[] Array_b =Array_a; // 把Array_a赋给 Array_b
Array_b[0] = 10; // 给Array_b的唯一元素赋值10
Console.WriteLine(Array_a[0]); // 把Array_a的唯一元素的值输出,查看Array_b中元素值的变化是否影响Array_a元素
}
结果:10
原理:
在线程堆栈中定义一个数组a遇见new关键字时在托管堆中开辟一个空间存放5、6,把地址传给a,把a赋给b时又把地址传给b,所以当改变数组b的值时,a也改变。
6、 var类型与引用类型:在方法范围中声明的变量可以具有隐式类型 var,匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。类型名由编译器生成,并且不能在源代码级使用。这些属性的类型由编译器推断。
7、 装箱:是把值类型转换为引用类型。拆箱:把引用类型转换为值类型。注意:拆箱后的类型与装箱前的类型要匹配。
8、 类型转换:Parse只能把string转换为相应的类型。DateTime.Parse(2011-07-13) toString()转换成string类型 Convert.To类型强类型转换
9、 Dynamic类型:该类型是一种静态类型,但类型为 dynamic 的对象会跳过静态类型检查。 大多数情况下,该对象就像具有类型 object 一样。 在编译时,将假定类型化为 dynamic 的元素支持任何操作。
10、 程序:银行系统完成查询余额、存款、取款、转账
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _03
{
class Program
{
static int Count = 3;
static string username = "gsw";
static string password = "111111";
static double money = 2000.00;
static void Main(string[] args)
{
Console.WriteLine("欢迎使用光大银行");
Console.Title = "光大银行";
ff();
}
static void ff()
{
Console.WriteLine("用户名:");
string temun = Console.ReadLine();
Console.WriteLine("密码:");
string tempw = "";
for (int i = 0; i < 6; i++)
{
ConsoleKeyInfo cki = Console.ReadKey(true);
Console.Write("*");
tempw += cki.KeyChar;
}
if (username == temun && password == tempw)
{
while (true)
{
} } }
Console.Clear();
Console.WriteLine(username + "欢迎登录!");
Console.WriteLine("1、余额查询 2、存款 3、取款 4、转帐 5、退出");
switch (Console.ReadLine())
{
case "1":
Select();
break;
case "2":
CunKuan();
break;
case "3":
QuKuan();
break;
case "4":
ZhuanZhang();
break;
case "5":
return;
}
}
}
else
{
Count--;
Console.WriteLine();
Console.WriteLine("用户名或密码错误!还有{0}次输入机会",Count);
Console.WriteLine("请重新输入!");
if (Count > 0)
{
ff();
}
}
}
static void SetColor()
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("返回请按任意键!");
Console.ForegroundColor = ConsoleColor.White;
Console.ReadKey(true);
}
static void Select()
{
Console.WriteLine("您的余额为:{0:c}", money);
SetColor();
}
static void CunKuan()
{
Console.WriteLine("请输入要存入的金额:");
double temmoney = double.Parse(Console.ReadLine());
money += temmoney;
Console.WriteLine("操作成功!当前余额为:{0:c}", money);
SetColor();
}
static void QuKuan()
{
Console.WriteLine("请输入要取的金额:");
double temmoney3 = double.Parse(Console.ReadLine());
if (temmoney3 <= money)
{
money -= temmoney3;
Console.WriteLine("操作成功!当前余额为:{0:c}", money);
SetColor();
}
else
{
Console.WriteLine("对不起,您的余额不足!");
SetColor();
}
static void ZhuanZhang()
{
Console.WriteLine("请输入要转入的用户名:");
string temuser2 = Console.ReadLine();
Console.WriteLine("请输入要转的金额:");
double temmoney4 = double.Parse(Console.ReadLine());
if (temmoney4 <= money)
{
money -= temmoney4;
Console.WriteLine("操作成功!当前余额为:{0:c}", money);
SetColor();
else
{
Console.WriteLine("对不起,您的余额不足!");
SetColor();
}
}
}