c# 学习 -- 以前总结

1. c# 运行过程


c# 学习 -- 以前总结_第1张图片

2. 源代码执行过程

源代码------->编译--------->执行

1). 编译阶段

(1)源代码---->中间语言(IL)

(2) 公共语言运行库(CLR)---->中间语言(IL)---->平台专业代码

CLR: .Net Framework的核心

IL:低级语言,结构简单,可以快速的转换为本地机器码


3. .Net概念

(1) 程序集(assembly)是包含编译好的、面向.Net Framework的代码的逻辑单

(2) 命名空间:名称空间是.Net避免类名冲突的一种方式

(3)反射:因为程序集存储了元数据,包括在程序集中定义的所有类型和这些类型的成员的细节,所以可以编程访问这些元数据,这个技术称为反射


4.

(1) c#区分大小写,即 strVar 与strvar是不同的变量;

(2) 编译器不允许表达式中使用没有初始化的变量;

(3) 同名的局部变量不能再同一作用域内声明两次;

(4) c#把类类级别什么的变量看作字段,而把方法中声明的变量看作局部变量;

public class myClass

{

int pro=66;

public void method()

{

int pro=88;

}

}

(5)常量必须能在编译时用于计算。因此常量的初始化不能从变量中提取(如果必须这样,应使用只读字段)


5. 类型推断(type inference)

使用var关键字,编辑器根据变量的初始化值“推断”变量的类型


6 值类型与引用类型

(1) 值类型存储在堆栈上,而引用类型储存在托管堆上

(2) string与引用类型的区别:字符串是不可变化的;

string str1="Old String";

string str2=str1;

str1="New String";

此时str1="New String",str2="Old String",因为当s1的值变化时,并不会替换原来的值,堆上会为新值分配一个新的对象,str2变量仍然指向原来的对象


7. 循环语句

(1) for 语句

(2) while语句

(3) do...while 语句

(4) foreach 语句


8. 枚举型

public enum MyEnum

{

Monday=1,

Thursday=2

}

int iEnum=(int)MyEnum;

string sEnum =myEnum.toString();


9 命名空间

命名空间的别名使用

using newStr=命名空间

使用格式 newStr::类名


10. 字段与属性

字段是私有的

属性是公有的


11

. (1)方法重载:方法的名字相同,但是参数的个数或者参数类型不同

注意:(A)方法不能仅在返回类型上有区别

(B)方法不能仅根据参数是声明ref还是out来区分

(2)方法重写:子类对父类的方法进行重写。成员字段和静态函数都不能声明为virtual,因为这个概念只对类中的实例函数成员有意义


12. 属性的访问修饰符

在get和set访问器中,必须有一个具备属性的访问级别,否则会是这两个访问器的访问级别都不是属性


13. 构造函数

如果提供了带参数的构造函数,编译器就不会自动提供默认的构造函数,

Public class DemoClass

{

Private string name;

Public DemoClass(string name)

{

This.name=name;

}

}

一般使用this来区别成员字段和同名的参数


14. 静态构造函数

静态构造函数只执行一次

静态构造函数只能访问类的静态成员,不能访问类的实例成员。

静态构造函数不能带任何参数,一个类也只能有一个静态构造函数

静态构造函数没有访问修饰符,因为其他C#代码从来不调用它,但在加载类时,总是由.NET运行库调用它

无参数的实例构造函数与静态构造函数可以在同一个类中同时定义


15. readonly 变量

(1)允许把一个字段设置为常量,但还需要执行一些计算,以确定它的初始值,使用readonly

(2)其规则是可以在构造函数中给只读字段赋值,但不能在其他地方赋值。

(3) readonly字段还可以是一个实例字段,而不是静态字段,类的每个实例可以有不同的值,与const字段不同,如果要把只读字段设置为静态,就必须显式声明它。


16. 静态类

静态类只能包括静态的属性和方法


17 扩展方法

扩展类的方式,但如果没有源代码,就用到扩展方法,扩展方法主要是写在静态类中的静态方法

例如

Public class sclass

{

private double val=0;

public double Val

{

get{return value;}

set {value=val;}

}

}

public static class testExtension

{

public void WriteExtension(this sclass,int num)

{

String str = “$”+sclass.Val +num;

Console.writeLine(“Value={0}”, str);

}

}

调用

sclass _sc = new sclass();

_sc. WriteExtension(88);


18. 隐藏方法

子类中的函数名称与父类中的函数名称一样时,在子类的同名函数名前,加上new,即可在子类中隐藏父类的同名函数方法

public class ParentClass

{

public void method()

{

Console.WriteLine("Parent method console");

}

}

public class ChildClass:ParentClass

{

public new void method()

{

Console.WriteLine("Child method console");

}

}

测试调用

ChildClass child = new ChildClass();

child.method();

19. 拆箱和装箱


值类型------------>引用类型 装箱

引用类型-------------->值类型 装箱


20. default 关键字

根据泛型类型是引用类型还是值类型,泛型default用于将泛型类型初始化为null或者0


21. Array数组

值类型

Clone() : 创建一个新数组

Array.Copy():传递阶数相同并且足够空间的已有数组


22.

Action 参数可有可无, 无返回值

Func 参数可有可无, 有返回值


23. StringBuilder

初始化方式

(1)StringBuilder sb = new StringBuilder(100);

(2)StringBuilder sb = new StringBuilder("Hello World");


24. 正则表达式

(1)常用格式

(2)

[a-z]: a~z之间的任意字符

[1|a]:1或者a字符


25. List 排序和类型转换

static void Main(string[] args)

{

try

{

List lstEmployees = new List();

lstEmployees.Add(new Person() { name = "Li Lei20", age = 20, sex = "M" });

lstEmployees.Add(new Person() { name = "Li Lei22", age = 22, sex = "M" });

lstEmployees.Add(new Person() { name = "Li Lei24", age = 24, sex = "F" });

lstEmployees.Add(new Person() { name = "Li Lei28", age = 28, sex = "F" });

lstEmployees.Add(new Person() { name = "Li Lei25", age = 25, sex = "M" });

lstEmployees.Add(new Person() { name = "Li Lei21", age = 21, sex = "F" });

lstEmployees.Add(new Person() { name = "Li Lei18", age = 18, sex = "M" });

lstEmployees.Sort((r1, r2) => r1.age.CompareTo(r2.age));

List allPersons = lstEmployees.ConvertAll(em => new Employee() { name = em.name, age = em.age });

}

catch(Exception ex)

{

string msg = ex.Message;

}

Console.Read();

}

public class Employee

{

public string name { get; set; }

public int age { get; set; }

}

public class Person

{

public string name { get; set; }

public int age { get; set; }

public string sex { get; set; }

}


26. 队列

public class EmployeeManager

{

private readonly Queue employees = new Queue();

public bool IsAvailable

{

get { return employees.Count>0; }

}

public void AddEmployee(Employee emp)

{

lock (this)

{

employees.Enqueue(emp);

}

}

public Employee GetEmployee()

{

Employee employee = null;

lock (this)

{

if (IsAvailable)

{

employee = employees.Dequeue();

}

}

return employee;

}

}

public class Employee

{

public Employee(string eId, string name)

{

this.eId = eId;

this.name = name;

}

private string eId = string.Empty;

public string EID

{

get { return eId; }

set { eId = value; }

}

private string name = string.Empty;

public string Name

{

get { return name; }

set { name = value; }

}

}

public class ProcessManager

{

EmployeeManager employeeManager = null;

public ProcessManager(EmployeeManager employeeManager)

{

this.employeeManager = employeeManager;

}

public static void Start(EmployeeManager empManger)

{

new Thread(new ProcessManager(empManger).Run).Start();

}

protected void Run()

{

while(true)

{

if(employeeManager.IsAvailable)

{

Employee employee = employeeManager.GetEmployee();

Console.WriteLine("The Emploee EID is {0},Name is {1}", employee.EID, employee.Name);

}

}

}

}

static void Main(string[] args)

{

try

{

EmployeeManager emp = new EmployeeManager();

ProcessManager.Start(emp);

for(int i=1;i<=1000;i++)

{

emp.AddEmployee(new Employee("$" + i.ToString(), "Chines" + i.ToString()));

}

}

catch(Exception ex)

{

string msg = ex.Message;

}

Console.Read();

}

你可能感兴趣的:(c# 学习 -- 以前总结)