1、控制台成员:
(1)Console.WriteLine()与Console.Write()前面要换行。
(2)Console.ReadLine()与Console.Read()前面读一行返回String类型,后面读一个字符返回int类型。
(3)ConsoleKeyInfo cki=Console.ReadKey()两种参数一个是无参,一个是bool类型。不用按回车直接输出。参数是true时不输出。
class Program
{
static void Main(string[] args)
{
Console.WriteLine(GetPassword(4));
Console.ReadLine();
}
static string GetPassword(int len)
{
string Password = "";
for (int i = 0; i < len; i++)
{
ConsoleKeyInfo ski = Console.ReadKey(true);
Console.Write("*");
Password = Password + ski.KeyChar;
}
return Password;
}
}
(4)namespace可以嵌套,class可以嵌套,方法不可以嵌套。
(5)控制台小钢琴
class Program
{
static void Main(string[] args)
{
while (true)
{
bool mark = true;
ConsoleKeyInfo cki = Console.ReadKey(true);
switch (cki.KeyChar)
{
case '1':
Console.Beep(1000, 500); break;
case '2':
Console.Beep(1200, 500); break;
case '3':
Console.Beep(1500, 500); break;
case '4':
Console.Beep(1500, 500); break;
case '5':
Console.Beep(1800, 500); break;
case '6':
Console.Beep(2000, 500); break;
case '7':
Console.Beep(2500, 500); break;
default:
Console.WriteLine("请输入1-7");
mark = false;
break;
}
if (mark)
{
Console.BackgroundColor = (ConsoleColor)int.Parse(cki.KeyChar.ToString());
for (int i = 0; i < int.Parse(cki.KeyChar.ToString()); i++)
{
Console.Write(" ");
}
Console.BackgroundColor = ConsoleColor.Black;
Console.WriteLine(cki.KeyChar);
}
}
}
}
2、数据类型:
(1)静态的成员是属于类的,非静态的是属于对象的。
(2)const 定义常量,属于静态的,ReadOnly 定义的只读属于非静态的,且可在构造函数中可以改变。
3、命名规则:
(1)不能用汉语命名。可以用拼音。匈牙利命名法:属性+类型+对象
(2)帕斯卡命名法,首字母大写。
4、值类型引用类型:
(1)值类型隐式的派生自System.ValueType.
5、var与匿名类型:
var可以在方法内部声明具有隐式类型的变量。但只可以在方法中用。
匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中
而无需首先显式定义一个类型,类型名由类型名由编译器生成,并且不能在源代码级使用。这些属性的类型由编译器推断。
var v = new { Amount = 108, Message = "Hello" };
在将匿名类型分配给变量时,必须使用 var 构造初始化该变量。这是因为只有编译器能够访问匿名类型的基础名称。
6、装箱是把值类型转为引用类型,而拆箱是把引用类型转为值类型,装箱拆箱前后配对。
7、类型转换:
(1)Parse,
类型.Parse(string)。
例:int i= int.Parse("123");注意Parse只能把string类型转为其它类型。
(2)Convert.To类型
强类型转换。
例:int i=Covert.ToInt32("123");
值类型与引用类型的一些简单的小知识
C#中分为两种类型,即值类型与引用类型,值类型包括简单类型,
枚举类型,结构类型。而引用类型则分为类类型、接口、数组、委托、字符串string,
有一点要记住string类型是引用类型。
值类型与引用类型在用时有很大的区别,比如:
例 1:
class Program
{
static void Main(string[] args)
{
int a = 5;
int b = a;
b = 10;
Console.WriteLine(a);
Console.ReadLine();
}
}
运行结果是5。
而如果是引用类型:
例 2:
class Program
{
static void Main(string[] args)
{
(1)…… int[] Array_1 = new int[] { 1,2};
(2)…… int[] Array_2 = Array_1;
(3)…… Array_2[0] = 10;
(4)…… Console.WriteLine(Array_1[0]);
Console.ReadLine();
}
}
运行结果却变成了10。
这是为什么呢?因为值类型是存放在线程堆栈中
例1中执行Main函数时,首先在堆栈中把a=5放入,执行b=a时是把a的值给了b。
当执行b=10时,在堆栈中放入b=10,而a的值未变。输出a时,a还是等于5。
而当对象变为数组时就不一样了,因为数组在线程堆栈中存放的只是地址,
当执行例2中的(1)时,等号左边会把Array_1[]数组存放在线程堆栈中,等号右边
当遇见new时,会在托管堆中开出一块内存把1,2放入,然后把地址传给线程堆栈中的
Arrary_1。当执行到(2)时,Array_1会把地址给Array_2,也就是两个数组同时指向
{1,2},当到(3)时会把托管堆中的1换为2。现在Array_1和Array_2都指向{10,2}。
当输出Array_1[0]时值就变成了10。这就是值类型与引用类型的差别。
转载于:https://blog.51cto.com/benxiaozi/610380