MVC系列随笔二

-》Linq
1.隐式类型 var a=1;var b="哈哈";在不知道类型的情况下使用,IL会根据赋值类判断类型,不会影响效率。因为IL产生的中间一样。var 必须赋值。
2.匿名类型 var entity= new {title="我是匿名类型",fun="我很有用"};
 把一个对象的属性copy到匿名对象中,不用显示指定属性的名字,原始的属性名字会被copy到匿名对象中。
 监视entity会发现它的类型就是Anonymous Type(匿名类型)
 不要试图在创建匿名对象的方法外面访问它的属性
 在特定的网站,序列化和反序列化JSON时有用
3.自动属性
4.对象初始化器 var obj=new Obj{id=GUID.NewGuid(),title="哈哈"}; var arr=List<int>(){1,2,3,4,5};
5.委托
6.泛型
   装箱:值类型转换为object类型; 拆箱:Object转换为值类型   装箱操作会导致性能损耗 泛型能解决这个问题
   Hashtable Queue Stack等非泛型容器会装箱,这些容器只能存储Object类型的数据
   List<T>、Dictionary<TKey,TValue>都是泛型

自定义泛型
   public static class SomethingFactory<T>
   {
  public  static T InitInstance(T inObj)
  {
   if(false)
   {
    return  inObj;
   }
   return default(T);
  }
   }
   泛型约束:public static class SomethingFactory<T> where T:MyObj 只能传入MyObj类型或MyObj派生类
     或这样写:where T:MyObj,new()约束传入的类型必须有一个构造函数
 泛型的好处

      <1>算法的重用

        想想看:list类型的排序算法,对所有类型的list集合都是有用的

      <2>类型安全

      <3>提升性能

        没有类型转化了,一方面保证类型安全,另一方面保证性能提升

      <4>可读性更好
7.泛型委托
 委托基本归为3类:
 <1>Predicate泛型委托
 var d1=new Predicate<int>(More);
 定义:表示定义一组条件并确定指定对象是否符合这些条件的方法
    obj 要按照由此委托表示的方法中定义的条件进行比较的对象
    T 要比较的对象的类型
    返回结果 如果obj 符合由此委托表示的方法中定义的条件,则为true;否则为false
    pubic delegate bool Predicate<in T>(T obj);
    缺点定义太死,必须有一个返回值,必须有一个参数
 <2>Action泛型委托
  可以有0个到16个输入参数,输入参数的类型是不确定,但不能有返回值
     var d3 = new Action(noParamNoReturnAction);
                var d4 = new Action<int, string>(twoParamNoReturnAction);
       注意:尖括号中int和string为方法的输入参数
            static void noParamNoReturnAction()
            {
                //do what you want
            }
            static void twoParamNoReturnAction(int a, string b)
            {
                //do what you want
            }
 <3>Func泛型委托
 弥补Action泛型委托,不能返回值的不足,规定要有一个返回值,返回值的类型也由使用者确定
 var d5=new Func<int,string>(oneParamOneReturnFunc);
 注意:string 类型(最后一个泛型类型)是方法的返回值类型
     static string oneParamOneReturnFunc(int a)
            {
                //do what you want
                return string.Empty;
            }
8.匿名方法
   var arr = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8 };
            //var d1 = new moreOrlessDelgate(More);
            //var d1 = new Predicate<int>(More);
            var d1 = new Predicate<int>(delegate(int item)
            {

          //可以访问当前上下文中的变量
                          Console.WriteLine(arr.Count);
                if (item > 3)
                {
                    return true;
                }
                return false;
            });
            Print(arr, d1);
            Console.WriteLine("OK");
      <1>代码可读性更好

      <2>可以访问当前上下文中的变量
9.扩展方法
   扩展方法是静态类中的静态方法
   public static class MyClass
   {
  public static void ExtString(this String val)
  {
   Console.WriteLine(val);
  }
   }
   var a="aaa";
   a.ExtString();
   ----aaa----
      <1>扩展方法必须在一个非嵌套、非泛型的静态类中定义

        <2>扩展方法必须是一个静态方法

        <3>扩展方法至少要有一个参数

        <4>第一个参数必须附加this关键字作为前缀

        <5>第一个参数不能有其他修饰符(比如ref或者out)

        <6>第一个参数不能是指针类型
      注意事项

        <1>跟前面提到的几个特性一样,扩展方法只会增加编译器的工作,不会影响性能(用继承的方式为一个类型增加特性反而会影响性能)

        <2>如果原来的类中有一个方法,跟你的扩展方法一样(至少用起来是一样),那么你的扩展方法奖不会被调用,编译器也不会提示你

        <3>扩展方法太强大了,会影响架构、模式、可读性等等等等....

时间: 2024-08-29 19:52:37

MVC系列随笔二的相关文章

MVC系列随笔一

学习MVC我做了一些笔记,在学习MVC之前呢,我们需要先了解和MVC一起使用的小伙伴们 做事情要抓重点:    为什么要学MVC        MVC的好处        MVC如何使用,MVC的特点        MVC的原理        这种MVC模式能否扩展 ->ORM 框架 1.从广义上理解:ORM框架 面向对象的对象模型和关系型数据库的数据结构之间的转换   从狭义上理解:ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口. ->EF框架(Enti

MVC系列随笔四

->MVC→请求 处理 相应原理:客户端请求url→Controller→Model→Data Provider(sql server)             →View(将数据返回给视图)1.一种编程模式,分为3部分:模型.视图和控制器 ->模型:表示程序的数据和状态的代码.包括业务逻辑.数据库和底层之间的相互操作和验证规则 ->视图:用户界面,模型和视图是一对一或者一对多,模型的操作都应该是通过所关联的视图的变化反映出了的 ->控制器:模型和视图之间的调节周旋,用户对视图的操

MVC系列随笔三

->Lambda表达式   List<int> arr = new List<int>() { 1, 2, 3, 4, 5, 6, 7 };            arr.ForEach(new Action<int>(delegate(int a) { Console.WriteLine(a); }));            arr.ForEach(new Action<int>(a => Console.WriteLine(a))); 匿名

ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)

原文:ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用) 在上一章中主要和大家分享在MVC当中如何使用ASP.NET Core内置的DI进行批量依赖注入,本章将继续和大家分享在ASP.NET Core中如何使用Autofac替换自带DI进行批量依赖注入. PS:本章将主要采用构造函数注入的方式,下一章将继续分享如何使之能够同时支持属性注入的方式. 约定: 1.仓储层接口都以“I”开头,以“Repos

ASP.NET MVC Model绑定(二)

ASP.NET MVC Model绑定(二) 前言 上篇对于Model绑定的简单演示想必大家对Model绑定的使用方式有一点的了解,那大家有没有想过Model绑定器是在什么时候执行的?又或是执行的过程是什么样的?将在本篇为大家解除这些疑惑,在其中涉及到的一些描述类型和上下文参数会在后续的篇幅中讲到. Model绑定 IModelBinder.自定义Model绑定器简单实现 Model绑定器在MVC框架中的位置 MVC中的默认Model绑定器生成过程 IModelBinderProvider的简单

java RPC系列之二 HTTPINVOKER

java RPC系列之二  HTTPINVOKER 一.java RPC简单的汇总 java的RPC得到技术,基本包含以下几个,分别是:RMI(远程方法调用) .Caucho的Hessian 和 Burlap .Spring的基于HTTP的远程服务.以及使用JAX-RPC和JAX-WS的Web服务.本文主要介绍spring的httpinvoker的基本的配置实现. 二.Spring的httpinvoker的配置实现 基本步骤:       1.定义好服务端需要提供的接口方法(客户端调用的接口):

学习ASP.NET MVC系列 - 还有比这更简炼的吗?把复杂的事情变简单了,贡献啊!

转自 学习ASP.NET MVC系列: 学习ASP.NET MVC(一)--我的第一个ASP.NET MVC应用程序 学习ASP.NET MVC(二)--我的第一个ASP.NET MVC 控制器 学习ASP.NET MVC(三)--我的第一个ASP.NET MVC 视图 学习ASP.NET MVC(四)--我的第一个ASP.NET MVC 实体对象 学习ASP.NET MVC(五)--我的第一个ASP.NET MVC CURD页面 学习ASP.NET MVC(六)--我的第一个ASP.NET M

OAF_OAF架构MVC系列 - Control的概述(概念)

2014-06-18 BaoXinjian 一.摘要 Control层位于Model层和View层的中间,连接了Model层和View层, 主要存在两个功能 操作/初始化UI和数据 接受和处理页面上的用户的各种事件,并进行分发 本文的基本结构 Designand Create an OA Controller - 基本概念和建立 Handling an HTTP GET - 如何处理HTTP GET请求 Data层面 - 进行初始化 WebBean层面 WebBean层面 - 动态修改WebBe

ASP.NET MVC Model元数据(二)

ASP.NET MVC Model元数据(二) 前言 在上篇中,给大家留个对Model元数据的印象,并没有对Model元数据有过多的讲解,而在本篇中也不会对Model元数据的本身来解释,而是针对于它的生成过程,让大家能够清楚的了解到系统框架是在什么时候生成Model元数据的,对于Model元数据生成篇幅初定为两篇,本篇为它的整体的生成过程,下篇则为详细的生成过程并且会对它本身做一个粗略的介绍,希望大家看完能够有所收获 Model元数据 什么是Model元数据? 生成Model元数据的过程[一]