目录
MulticastDelegate重要的非公共字段
Feedback fbstatic = new Feedback(Program.FeedbackToConsole) ;
Feedback fbInstance = new Feedback(new Program ( ) .FeedbackToFile);
//如章节开篇代码的demo1中所示,用如下方法添加了三个委托,第一次将null和fb1合并,第二次是fb2和fb1合并,最后是fb3。下图插入三个委托后的状态
fbChain = (Feedback) Delegate.Combine (fbChain,fb1);
//Remove
fbChain = (Feedback) Delegate.Remove(fbChain,new Feedback (FeedbackToMsgBox)) ;
public abstract class MulticastDelegate : Delegate {
//创建一个委托数组,其中每个元素都引用链中的一个委托
public sealed override Delegate [ ] GetInvocationList () ;
}
//如果委托不获取任何参数,就使用()
Func<string> f=()=>"Jeff ";
//如果委托获取1个或更多参数,可显式指定类型
Func<int,string> f2 =(int n) => n.Tostring ( ) ;
Func<int,int,string> f3 = (int nl,int n2) => (nl + n2). ToString();
//如果委托获取1个或更多参数,编译器可推断类型
Func<int,String> f4 = (n)=> n.Tostring ( ) ;
Func<int, int,string> f5 = (n1,n2) => (n1 + n2).Tostring ();
//如果委托获取1个参数,可省略(和)
Func<int, String> f6 = n => n.Tostring ( ) ;
//如果委托有ref/ out参数,必须显式指定ref/out和类型
Bar b=(out int n)=> n=5;
//如果主体由两个或多个语句构成,必须用大括号将语句封闭,此时如果委托期待返回值,则必须在主体添加return语句
Func<Int32,Int32,String> f7 = (nl,n2) => { Int32 sum = nl + n2; return sum.ToString(); };
public abstract class MethodInfo : MethodBase {
//构造包装了一个静态方法的委托
public virtual Delegate CreateDelegate(Type delegateType);
//构造包装了一个实例方法的委托: target 引用“this”实参
public virtual Delegate CreateDelegate(Type delegateT'ype,0bject target) ;
}
//调用
public abstract class Delegate {
//调用委托并传递参数
public object DynamicInvoke (params Object [ ] args) ;
}
namespace system {
[ AttributeUsage(AttributeTargets.Enum,Inherited = false) ]public class FlagsAttribute : system.Attribute {
public FlagsAttribute ();
}
现在,要在代码中使用一个可空的Int32,就可以像下面这样写:
Nullable<Int32> x = 5;
Nullable<Int32> y = null;
Console.WriteLine("x: Hasvalue={0},Value={1} "",x.Hasvalue, x.Value) ;
Console.WriteLine("y: Hasvalue={0},value=(1)",y.HasValue,y.GetValueOrDefault());
//结果
x: Hasvalue=True,value=5
y : Hasvalue=False, value=0
int? x = 5;
int? y =null;