-
1、自定义转换概念 为自己的结构和类定义显示和隐式转换,从而使自己的结构和类可以变成一个预期相关的类型(比如我想将我家的狗狗转化为猫咪),并且使这种转化更加简单。 3、隐式转换语法(猫的类转化成狗的类) public static implicit operator Dog(Cat cat)//implecit指定为隐式转换(explicit指定为显式转换)operator指定为转换,operator后是目标类型,参数为需要转化的类型 { ··· } 4、转化实例 public static implicit operator Cat(Dog dog)//将狗狗转化为猫咪,隐式 { return new Cat(dog.name); } Dog dog=new Dog("Jack"); dog.Speak(); Cat cat=dog; cat.Spesk(); public static explicit opterator Dog(Cat cat)//将猫咪转化为狗狗显示转换 { return new Dog("Tom"); } ··· Dog dog2=(Dog)cat; dog2.Speak();查看全部
-
加new关键字隐藏父类的成员,不加new也可以,不过会警告。 和重写的区别???查看全部
-
继承、封装、多态查看全部
-
单继承查看全部
-
派生类查看全部
-
Lambda表达式 1、什么是匿名方法 delegate void ActCute(); ActCute del; del=delegate(){//方法的具体内容};//声明一个匿名方法 2、Lambda表达式 del=delegate(){}; del=()=>{···};查看全部
-
委托、事件和lambda表达式 1、委托 就是持有一个或者多个方法的对象并且可以执行该对象。 2、声明委托 用delegate声明 例如:声明一个卖萌的方法 delegate void ActCute(); 3、定义委托类型的对象 既然委托是一种类型,就可以定义该类型的对象。例如ActCute actCute; 4、给委托对象赋值 例如; class Dog{ public void WagTai(){···} } actCute=dog.WagTail; 5、使用委托类型 想调用函数一样使用委托类型。 actCute();查看全部
-
1、字典Dictionary<TKey,Tvalue> 字典容器存储的是一系列的键值对,没个值对应一个唯一的键。键的意义在于,我们可以通过键相对高效的访问到值。 2、字典操作 数量 Count 添加 Add(key,value) 删除 Remove 访问 [key] 3、栈 出栈 Pop 入栈 Push 获取栈顶元素 Peek 4、队列 先进先出容器。 出队 Dequeue 入队 Enqueue,有返回值查看全部
-
1、集合 就是一种存放多种数据的复杂类型。 2、基本集合类型 动态数组 ArrayList 列表 :List 栈 Stack 字典 Dictionary 队列 Queue 3、动态数组ArrayList 初始化,可以不指定大小 获取长度,使用Count属性 添加是使用Add 删除用Remove,RemoveAt 访问[index] 4、List<T> ArrayList是类型不安全,而且有装箱拆箱的性能问题,所以有了List<T>查看全部
-
泛型接口 1、泛型接口允许我们将接口成员的参数和返回类型设置为泛型参数的接口。 2、语法 interface Imyself<T>{//可以写多个泛型参数 T MySELF(T self); } 3、实现泛型接口语法 class A<T>:Imyself<A>{ public A Myself(A self);//类型参数可以是实现类本身或者其他类型 } 4、代码示例 interface ILearn<A>{ void Act(A cmd);//学习技能的接口 } class Labrador:Dog,ILearn<Sit>{ public void Act(Sit cmd); }查看全部
-
约束 1、什么是约束 约束就是控制泛型这匹烈马的缰绳!缩小泛型参数的范围(无论多么泛泛,总有一个范围,范围越小越好控制) 2、约束的意义 只有添加了约束,才能调用泛型参数中(比如T)的方法。 对泛型类和方法都可添加约束。 3、约束的类型 类名 ——该类或者继承该类的类 class ——任何类 struct ——任何值 接口名 ——该接口类型或任何实现该接口的类型 new() ——带有无參共有构造函数的类 4、约束叠加规则(这三个约束可以任意存在) A、主约束,只能有一个(类名,class,struct) B、接口约束,可以有任意多个 C、构造约束 5、约束例子 void Cage<T> where T:Pet,IClibTree,new() {···}查看全部
-
泛型 1、什么是泛型类 泛型类就是一个模子,转入类型的材料,可以塑造出想要的产品。 2、语法 class Cage<T>//这是一个笼子类,这是一个泛型类,类名后加上一对<>,加上一个泛型参数(类类型参数), { T[] petArray; public void PutIn(T pet){···} public T TakeOut(int index){···}//T就是一个占位符 } //实例化 var dogCage=new Cage<Dog>();//得到狗狗笼子 var catCage=new Cage<Cat>();//得到猫咪笼子 3、为什么需要泛型 用基类或者公共的接口,甚至是所有类的基类object,也可以实现一个Cage类,但是类型态宽泛,需要显示转换类型,并且判断真是类型是什么。 4、泛型使用 声明一个泛型类->引用泛型->构造实例 class Cage<t>{···} class Cage<Dog>{···} dogCage=new Cage<Dog>;查看全部
-
重载运算符 1、什么是重载运算符 利用现有的(不能创造新的运算符)某种运算符,针对自定义类(预定义类型和现有运算符的运算含义是确定的)或者结构,定义某种运算符(比如公狗狗+母狗狗=新生狗狗)。 2、重载运算符的原因 利用现有运算符,简化自定义类型的操作。做好是,该运算符和该操作,具有一定相关性。 3、语法细节 例如公狗狗+母狗狗=新生狗狗 public static Dog operator +(Dog male,Dog female) { ··· } 4、那些运算符可以重载 一元运算符:+、-、!、~、++、- -、true、false(操作数必须是类和结构) 二元运算符:+、-、*、%、&、|!、^、<<、>>、= =、!=、>、<、>=、<=(两个操作数至少有一个表示类或者结构) 不能重载:=、&&、||、[](索引操作)、()等 5、重载运算符不能做什么 创造新运算符 改变运算符语法 重定义运算符如何处理预定义类型 改变运算符的优先级和结合性 6、重在运算符举例 ··· public void ShowAge() { Console.WriteLine("Age="+_age); } ··· //重载自增操作,针对宠物的年龄 public static Pet opertor ++(Pet pet)//返回值为Pet类型,参数为宠物自身。所有的重载方法都需要public static修饰 { ++pet._age; return pet; } ··· Dog dog=new Dog("Jack"); dog._age=2; dog++; dog.ShowAge();查看全部
-
自定义转换 1、概念 为自己的类定义和结构显示和隐式转换 2、为什么需要自定义转换 使自己的结构和类型可以变成一个预期相关的类型(比如我想将我家的狗狗转化为猫咪),并且使这种转化更加简单。 3、隐式转换语法 注意 public static implicit operator Dog(Cat cat)//implecit指定为隐式转换,operator指定为转换,参数为需要转化的类型,operator后是目标类型 { ··· } 4、显示转换 public static explicit operator Cat(Dog dog) 5、转化实例 public static implicit operator Cat(Dog dog)//将狗狗转化为猫咪 { return new Cat(dog.name); } //将猫咪转化为狗狗 public static explicit opterator Dog(Cat cat)//显示转换 { return new Dog("Tom"); } ··· Dog dog=new Dog("Jack"); dog.Speak(); Cat cat=dog; cat.Spesk(); Dog dog2=(Dog)cat; dog2.Speak();查看全部
-
装箱和拆箱 1、装箱:根据值类型的值,在堆上创建一个完整的引用类型对象,并返回对象的引用,是一种隐式转换(语言自动完成)。 2、为什么要装箱 有时候需要将值类型转化为引用类型(比如object)来进行统一的操作(比如作为函数的参数)和统一的存储(比如object[])。 3、装箱简单实例 int i=3; object oi=null; oi=i;//发生装箱,原来的int保持不变,创建了一个新的对象,该对象在堆当中。需要性能消耗的。 4、装箱的本质 就是在对上创建了一个引用类型的副本,新创建的引用类型和原来的值类型相互独立。 相互独立代码验证: int i=3; object oi=i;//发生装箱 Console.WriteLine("i="+i+",oi="+oi.ToString);//输出为i=3,oi=3 oi=10; i=7; Console.WriteLine("i="+i+",oi="+oi.ToString);//输出为i=7,oi=10 说明两者相互独立 5、拆箱 将装箱后的对象转化回值类型的过程,是一种显示转换(需要手动干预)。 6、拆箱实例 in i=3; object oi=i;//装箱 int j=(int)oi;//拆箱查看全部
举报
0/150
提交
取消