- 值类型:[简单类型[整数类型(sbyte,byte,short,ushort,int uint,long....),字符类型),布尔类型,实数类型],结构类型, 枚举类型]。
- 引用类型:[类,委托,数组,接口]。
- 值类型变量的内存储的是实际数据,而引用类型变量在其内存空间中存储的是一个指针,该指针指向存储数据的另一块内存位置。
- 显示转换又叫强制类型转换与隐式转换相反,显示转换需要用户明确的指定转换类型,一般在不存在该类型的隐式转换是才用。
- 装箱转换是指将一个值类型的数据隐式地转换成一个对象类型的数据,把一个值类型装箱,就是创建一个object类型的实例。
- 拆箱转换是将一个对象类型的数据显示地转换成一个值类型数据。
- sizeof(类型)运算符求值类型数据在内存中占用的字节数。int类型是占4个字节, 一个字节是8位。
- 三元运算符 max=a>b?a:b 计算过程是 当a>b时max=a,否则max=b.
- 位运算符就是把<<(左移)或者<<(右移)把左边的数字换成二进制,然后根据规则在二进制数中移动右边相应的位数;
class Program { static void Main(string[] args) { int[,] num = new int[10, 10]; for (int i = 0; i < 10; i++) { for (int j = 0; j < 10-i; j++) { Console.Write(" "); } for (int k = 0; k < i; k++) { if (k == 0 || k == 1) { num[i, k] = 1; } else num[i, k] = num[i - 1, k] + num[i - 1, k - 1]; Console.Write(num[i,k].ToString()+" "); } Console.WriteLine(); } Console.Read(); } }
- Array类是所有数组类型的抽象基类型,它提供了创建,操作,搜索,排序数组的方法。在c#中数组实际上是对象。
- 面向对象的程序设计是一种基于结构分析的,以数据为中心的程序设计方法,其总体思路是,将数据及处理这些数据的操作封装到一个成为类的数据结构中,在程序中使用的是类的示例,即类的对象。
- 类和对象:通常把具有同样性质和功能的事物所构成的整体叫做类,也可以把具有相同内部存储结构和相同操作的对象看成同一类。
- 属性、方法和事件:属性是对象的状态和特点。
- 封 装:就是将用来描述客观事物的一组数据和操作封装在一起,形成一个类。被封装的数据和操作必须通过所提供的公共接口才能够外界所访问,具有私有访问权限的 数据和操作是无法从外界直接访问的,只有通过封装体内的方法才可以访问,这就是封装的隐藏性,隐藏性增加了数据的安全性。
- 继承:当一个新类继承了原来类所有的属性和操作,并且增加了属于自己的新属性和新操作,则称这个类为派生类,原来的类是派生类的基类,基类和派生类之间存在着继承关系。
- 重载:就是方法名称相同,但参数类型和参数个数不同就会有不同的具体实现。
- 重写:就是不但方法名称相同,同时参数类型和参数个数也相同但有不同的具体实现。
- 面向对象的有点:维护简单、可扩充性、代码重用。(面向对象的三大特征:继承、封装、多态)。
- 构造函数的性质:构造函数的名称与类的名称相同;构造函数尽管是一个函数,但没有任何类型,既不属于返回值函数也不属于void函数;一个类可以有多个构造 函数,但是所有构造函数的名称都必须相同,它们的参数各不相同,即构造函数可以重载;当类对象创建时,构造函数会自动地执行。
- 析构函数:在对象不再需要时,希望确保函数所占的存储空间能被收回,c#中提供了析构函数用于专门释放被占用的系统资源。
- 析构函数的性质:在类对象销毁时自动执行;一个类只能有一个析构函数,而且析构函数没有参数,即析构函数不能重载;析构函数的名称是“~”加上类的名称(中间无空格);与构造函数一样,析构函数也没有返回类型;析构函数不能被继承。
- 引用型参数:以ref修饰符声明的参数属于引用型参数。引用型参数本身并不创建新的存储空间,而是将实参的存储地址传递给形参,所以对形参的修改会影响原来实参的值。在调用方法前,引用型参数必须被初始化,同时在调用方法时对应引用型参数的实参也必须使用ref修饰。
- 输 出参数:以out修饰符声明的参数属于输出参数。与引用型参数类似,输出型参数也不开辟心的内存区域,它与引用型参数的差别在于,调用方法前无需对变量进 行初始化,输出型参数用于传递方法返回的数据,out修饰符后应跟随与形参类型相同的类型,用来声明在方法返回后传递的变量经过了初始化。
- 委托:委托的特点 委托类似与c++函数指针,但它是类型安全的;允许将方法作为参数进行传递;可用于定义回调方法;可以链接在一起;方法不需要与委托签名精确匹配。
-
static void Main(string[] args) { List<string> List = new List<string>() { "1", "2", "2", "6", "6","5", "4", "8", "12", "10" }; List<string> sort = new List<string>(); List.Sort(); for (int i = 0; i < List.Count; i++) { if (List.Count == 1) { sort.Add(List[0]); } else { if (i == List.Count - 1) { sort.Add(List[List.Count - 1]); } else { if (List[i] != List[i + 1]) { sort.Add(List[i]); } } } } foreach (var j in sort) { Console.WriteLine(j); } Console.Read();