笔记4

来源:互联网 发布:linux进程间通信方式 编辑:程序博客网 时间:2024/06/06 14:07

1.建立松耦合组件:public class PasswordResetHelper {

   private IEmailSender emailSender;

   public PasswordResetHelper(IEmailSender emailSenderParam) {

       emailSender = emailSenderParam;

}

。。。。(其他方法)

}

IEmailSender为一个接口,不在一开始就限制所创建IEmailSender接口的具体是哪个实例,而是通过一个方法来给其赋值,降低各组件之间的依赖性,方便以后的使用。不这样用还有一个缺点:所赋值的实例是要存在的。否则会出现错误。

2.C#的一些基本特性:

(1)自动属性

public class Product {

   private string name;

   public string Name {

       get { return name; }

       set { name = value; }

    }

}

可替换成:

public class Product {

     public string Name { get; set;}

                 }

用法为:objectName.Name

如果需要改变属性的实现方式,可用回以一种方法。

(2)扩展方法:

 在扩展方法的第一个参数前加上关键字this,第一个参数类型为所扩展类的名字而参数名为实例(该方法可拥有多个参数),如下为扩展ShoppingCart类:

public static class MyExtensionMethods {

   public static decimal TotalPrices(this ShoppingCart cartParam) {

       decimal total = 0;

       foreach (Product prod in cartParam.Products) {

           total += prod.Price;

       }

       return total;

    }

}

完成扩展方法后,只要创建一个所扩展类的实例,就可调用该扩展方法,如:

ShoppingCart cart = new ShoppingCart();//未初始化

decimal cartTotal = cart.TotalPrices();

该方法也可用在接口上,用法跟上面的差不多,一旦扩展后,该接口的实例都可调用该扩展方法;

(3)想使用LINQ扩展方法必须先引入命名空间usingSystem.Linq;

(4)部分LINQ扩展方法的延迟性:具有延迟性的LINQ语句只有当结果被枚举(输出)时,才会执行这些语句并且非首次枚举时也会再次执行这些语句。

3.C#的delegate(委托):delegate是一个类似函数指针的东西(可搭载多个对像),

(1)public delegate void Notify(int value); 这里声明了一个Delegate的类型,名为Notify,这种Delegate类型可以搭载返回值为void,有一个int类型参数的函数。

(2)public Notify  notifier;这里声明了一个Notify的对象(即,声明了某种Delegate类型的对象)。区分:Notify是类型,notifier是对象。

(3)假设前两步声明都在Test类中,创建一个Test类的实例test,通过使用=,+=,-=来进行赋值增加减少操作。例如

test.notifier = new Test. Notify(test.NonStaticMethod);

test.notifier += new Test. Notify(Test.StaticMethod); (静态方法调用类名,非静态则用实例名)

(4)可通过notifier.Invoke();来运行被搭载的函数;

具体使用方法等上这个博客查看http://www.cnblogs.com/hyddd/archive/2009/07/26/1531538.html

4.Razor的视图布局:如果在视图中将Layout(头部那里)设置为null,则需将<html></html>

<head>.....等标签补上,如果不设为null,视图会自动寻找一个有渲染html.head等页面所需内容的布局;

0 0
原创粉丝点击