12 2022 档案

摘要:协变:让返回值类型返回比声明的类型派生程度更大的类型,就是“协变”。 class Program { static void Main(string[] args) { ISalary<Programmer> s = new BaseSalaryCounter<Programmer>(); Prin 阅读全文
posted @ 2022-12-20 16:38 Wen_Chen 阅读(14) 评论(0) 推荐(0) 编辑
摘要:1.委托是方法指针; 2.委托是一个类,当对其进行实例化的时候,要将引用方法作为它的构造方法的参数。 添加event关键字保护委托:在外的赋值都会报错。 class FileUploader { public delegate void FileUploadHandler(int progress) 阅读全文
posted @ 2022-12-20 15:37 Wen_Chen 阅读(16) 评论(0) 推荐(0) 编辑
摘要:闭包对象:如果匿名方法引用了某个局部变量,编译器就会自动将该引用提升到该闭包对象当中。 class Program { static void Main(string[] args) { List<Action> listAction = new List<Action>(); for (int i 阅读全文
posted @ 2022-12-20 14:04 Wen_Chen 阅读(18) 评论(0) 推荐(0) 编辑
摘要:Action:无返回值,可以包含16种参数; Func:有返回值,也可以包含16种参数,一共17种; Predicate:表示定义一组条件并判断参数是否符合条件。 class Program { delegate int AddHandler(int i, int j); delegate void 阅读全文
posted @ 2022-12-20 12:11 Wen_Chen 阅读(23) 评论(0) 推荐(0) 编辑
摘要:1.指定参数是值类型(除Nullable)外,可有如下形式: public void Method<T> (T t) where T: struct{} 2.指定参数是引用类型,可有如下形式: public void Methodl<T>(T t) where T: class{} //这个是直接c 阅读全文
posted @ 2022-12-20 10:48 Wen_Chen 阅读(21) 评论(0) 推荐(0) 编辑
摘要:总是优先考虑使用泛型: 避免在泛型类型中声明静态成员 static void Main(string[] args) { MyList mylist01 = new MyList(); MyList mylist02 = new MyList(); Console.WriteLine(MyList. 阅读全文
posted @ 2022-12-19 17:14 Wen_Chen 阅读(14) 评论(0) 推荐(0) 编辑
摘要:在LINQ查询中,避免不必要的迭代 MyList: class MyList : IEnumerable<Person> { List<Person> listPerson = new List<Person>() { new Person(){Name = "Mike",Age = 23}, ne 阅读全文
posted @ 2022-12-19 16:27 Wen_Chen 阅读(19) 评论(0) 推荐(0) 编辑
摘要:本地数据源用IEnumerable<T>; 远程数据源用IQueryable<T>; 阅读全文
posted @ 2022-12-19 16:08 Wen_Chen 阅读(7) 评论(0) 推荐(0) 编辑
摘要:在157前面出现实现迭代器的操作接口,但是扩展性太低,如果存在新的排序要求,必须实现新的比较器。 对代码的侵入性太高,为类型继承了接口,增加了新的方法。 List<Salary> companySalary = new List<Salary>() { new Salary(){Name = "Mi 阅读全文
posted @ 2022-12-19 11:38 Wen_Chen 阅读(28) 评论(0) 推荐(0) 编辑
摘要:在延迟求值的情况下,只是定义了一个查询,而且不是立刻执行。 List<int> list = new List<int>() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; var temp1 = from c in list where c > 5 select c; var 阅读全文
posted @ 2022-12-19 11:36 Wen_Chen 阅读(31) 评论(0) 推荐(0) 编辑
摘要:List<Person> personList01 = new List<Person>() { new Person(){Name = "1",CompanyID = 1}, new Person(){Name = "2",CompanyID = 1 }, new Person(){Name = 阅读全文
posted @ 2022-12-17 16:20 Wen_Chen 阅读(28) 评论(0) 推荐(0) 编辑
摘要:匿名类型的特性: 1.既支持简单类型也支持复杂类型。简单类型必须是一个非空初始值,复杂类型则是一个以new开头的初始化项; 2.匿名类型的属性是只读的,没有属性设置器,它一旦被初始化就不可更改; 3.如果两个匿名类型的属性值相同,那么就认为两个匿名类型相等; 4.匿名类型可以在循环中用作初始化器; 阅读全文
posted @ 2022-12-17 14:50 Wen_Chen 阅读(28) 评论(0) 推荐(0) 编辑
摘要:在对集合进行线程间的操作时要分外小心,集合属性开放可写操作。由于集合是引用类型,在两个线程中改变同一个集合,可能会导致另一个线程访问时出错。 class Student { public string Name { get; set; } public int Age { get; set; } } 阅读全文
posted @ 2022-12-17 13:44 Wen_Chen 阅读(13) 评论(0) 推荐(0) 编辑
摘要:不要为迭代器设置可读属性:其一:违背了设计原则的开闭原则,被设置到集合中的迭代器可能会导致集合的行为发生异常或者变动; 其二:LINQ可以不创建任何新的类型就能满足任何迭代需求。 阅读全文
posted @ 2022-12-17 10:24 Wen_Chen 阅读(9) 评论(0) 推荐(0) 编辑
摘要:数据视图:虚拟的表格,但是对视图进行增删改的时候对应的表也会发生变化。视图是由几个表组合到一起的东西。 阅读全文
posted @ 2022-12-16 08:45 Wen_Chen 阅读(23) 评论(0) 推荐(0) 编辑
摘要:Parallel.ForEach<DataRow>(taskTb.AsEnumerable(), (Action<DataRow>)(taskRow =>{})) 委托的形式遍历表中的每行: DataRow:行;taskTb:表;taskRow:参数。 阅读全文
posted @ 2022-12-16 08:45 Wen_Chen 阅读(87) 评论(0) 推荐(0) 编辑
摘要:实现自定义集合接口,需要继承ICollection和IEnumerable接口。 如果继承List则会丧失接口的使用。List并没有提供可供子类使用的protected成员。 在实现List接口的时候,new Add方法此时并没有覆盖掉List中的Add方法。 新建三个类 class Employe 阅读全文
posted @ 2022-12-15 20:58 Wen_Chen 阅读(22) 评论(0) 推荐(0) 编辑
摘要:确保集合的线程安全。在开启多线程操作集合的时候,很容易对集合进行增删改查,这样子,集合的访问情况就会变化。 AutoResetEvent:reset()方法.将线程设置为非终止状态,导致线程阻止;set()方法.将线程设置为终止状态,允许一个或多个等待线程继续。两者设置成功均返回true,不成功返回 阅读全文
posted @ 2022-12-15 20:00 Wen_Chen 阅读(58) 评论(0) 推荐(0) 编辑
摘要:集合总体上分为线性集合和非线性集合。线性集合具有直接前驱和直接后驱;而非线性集合可能有多个后驱或者前驱。 线性集合按存储方式又分为:直接存储和顺序存储。 直接存储:该类型的集合数据元素可以直接通过下标来访问(Array,string,struct);优点:向数据结构中添加元素很高效,直接放在数据末尾 阅读全文
posted @ 2022-12-15 09:31 Wen_Chen 阅读(58) 评论(0) 推荐(0) 编辑
摘要:在C#中的ICloneable中给出的Clone方法只是一个模棱两可的方法,并不足以实现深拷贝和浅拷贝。 深拷贝: using(Stream objectStream = new MemoryStream()) { IFormatter formatter = new BinaryFormatter 阅读全文
posted @ 2022-12-14 20:47 Wen_Chen 阅读(19) 评论(0) 推荐(0) 编辑
摘要:foreach:自动将代码置入try-finally块;若类型实现了IDispose接口,它会在循环结束后自动调用Dispose方法。 using是try-finally的语法糖。 集合版本:任何对集合进行增删操作的都会使集合版本+1; foreach使用的是迭代器,每次遍历都会针对集合的版本进行确 阅读全文
posted @ 2022-12-14 13:23 Wen_Chen 阅读(62) 评论(0) 推荐(0) 编辑
摘要:数组在定义的时候就确定长度,且不可变。 ArrayList是链表结构,可以动态的增减内存空间。 List是ArrayList的泛型实现,除去了拆箱装箱的操作。 int[] iArr = { 0, 1, 2, 3, 4, 5, 6 }; ArrayList arrayList = ArrayList. 阅读全文
posted @ 2022-12-14 10:16 Wen_Chen 阅读(13) 评论(0) 推荐(0) 编辑
摘要:实现IFormattable的Tostring的方法,实现为类型输出格式化字符串。 public string ToString(string format, IFormatProvider formatProvider) { switch (format) { case "EN": return 阅读全文
posted @ 2022-12-11 13:46 Wen_Chen 阅读(52) 评论(0) 推荐(0) 编辑
摘要:不管是Equals还是“==”都倾向于:对于引用类型看是否指向同一对象;对于值类型,判断类型的值是否相等。 对于 对象来说,地址不同的情况下,就算对象的值相同,两个对象也不会相等。如果想要两个对象在对象的值相等的情况下使得两个对象相等,就应该重载Equals运算符。 public override 阅读全文
posted @ 2022-12-11 12:15 Wen_Chen 阅读(11) 评论(0) 推荐(0) 编辑
摘要:enum:枚举类型,不声明第一个值的情况下,默认为0。而且里面的值输出只能是设定值 例: public enum Week { zero = 0, first = 1, sencond, third, four, five, six, seven, eight, nine, ten, } publi 阅读全文
posted @ 2022-12-11 10:09 Wen_Chen 阅读(15) 评论(0) 推荐(0) 编辑
摘要:const:是编译时的常量;修饰基元类型、字符串类型、枚举类型。const不属于变量、属性或索引,只能在定义的时候赋值,其他地方无法赋值。运行时不会经过const值。 readonly:是运行时的常量。语法糖,在类中赋值可以无限多次,但是实例赋值只能赋值一次 readonly当是值类型时,无法在外部 阅读全文
posted @ 2022-12-10 20:02 Wen_Chen 阅读(25) 评论(0) 推荐(0) 编辑
摘要:TryParse:类型转化耗时短,转化失败也能尽快跳出来。 Parse:类型转化成功的话与TryParse的耗时相差无几,转化失败会耗时多点。 用Stopwatch来计算运行时间 阅读全文
posted @ 2022-12-10 18:18 Wen_Chen 阅读(49) 评论(0) 推荐(0) 编辑
摘要:as:在用父类对象转子类时,成功返回子类实例。不成功返回null。 is:用于判断对象是不是属于该类的,若不是则false,是返回true 阅读全文
posted @ 2022-12-10 18:01 Wen_Chen 阅读(648) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示