際際滷

際際滷Share a Scribd company logo
eleks.comeleks.com
Advanced C#. Part 2
Events and Delegates. Anonimous methods. Lamda
Expressions. LINQ
亠仍亠亞舒亳
public abstract class Delegate : ICloneable, ISerializable
亠仍亠亞舒亳
亠仍亠亞舒亳  于从舒亰于仆亳从亳 仆舒 仄亠仂亟亳, 磻 仆从舒仗仍ムム 仗舒于亢仆 于从舒亰于仆亳从亳  仆舒亟舒ム
亰仆 亠于亳 亟仍 仂弍仂亳 亰 仆亳仄亳.
亠仍亠亞舒亳  仂弍从舒仄亳 亳仗 System.Delegate 舒弍仂 System.MulticastDelegate.
System.Delegate (obsolete) - 仍从亳 仂亟仆亠 仗仂亳仍舒仆仆 仆舒 仄亠仂亟
System.MulticastDelegate  从仍从舒 仗仂亳仍舒仆 仆舒 仄亠仂亟, 磻 于亳从仍亳从舒ム 仗仂 仍舒仆ミ勤済
亳 仂仗亳 亟亠仍亠亞舒亳 仄亳 于从舒亰仄仂 仗仂仂亳仗 仄亠仂亟, 仆舒 磻亳亶 弍亟 仗仂亳仍舒亳
亠从亰亠仄仗仍亳 亟舒仆仂亞仂 亟亠仍亠亞舒舒.
public delegate void MyDelegate (string s);
亟亠 MyDelegate  仆舒亰于舒 亟亠仍亠亞舒舒 (仆舒亰于舒 亳仗), void  亳仗 仂 仄舒ム 仗仂于亠舒亳 仆从,
string  亳仗 舒亞仄亠仆舒 仆从亶
弌舒仄 仗仂 仂弍 亟亠仍亠亞舒 磦仍 亳仗仂仄  亢仂亟仆亳 仗仂亳仍舒仆 仆舒 仄亠仂亟 仄亳亳 仆亠 仄仂亢亠 ,
于亟仗仂于亟仆仂, 仆亠 仄仂亢亠 于亳从仂亳仂于于舒亳 亟仍 亰于亠仆亠仆仆 亟仂 仆亳.
亞仂仍仂亠仆仆 亟亠仍亠亞舒舒
MyDelegate delegate1 = new MyDelegate(MyHandler);
亠 MyDelegate  亳仗 亟亠仍亠亞舒舒, delegate1  亠从亰亠仄仗仍 亟亠仍亠亞舒舒, 磻亳亶 弍亟亠 于仂亠仆亳亶
于 亠亰仍舒 于亳从仂仆舒仆仆 从仂仆从, MyHendler  仄亠仂亟, 仆舒 磻亳亶 弍亟亠 仗仂亳仍舒亳
亟亠仍亠亞舒.
仍 于仂亠仆仆 亟亠仍亠亞舒舒 仄亳 仄仂亢亠仄仂 亰于亠舒亳 亟仂 仄亠仂亟于, 仆舒 磻 于仆 仗仂亳仍舒.
仂 亟亠仍亠亞舒舒 仄仂亢仆舒 亰于亠舒亳 磻 亟仂 舒仄仂亞仂 仄亠仂亟舒:
delegate1(Hello World);
弌于仂亠仆仆 亠从亰亠仄仗仍舒 亟亠仍亠亞舒舒
eleks.com
亠仄仂仆舒 1
 舒亶仗仂亳亶 仗亳从仍舒亟 仂弍仂亳 亰 亟亠仍亠亞舒舒仄亳
Advanced C#. Part 2
亠仂亟亳 于 .Net 亟仍 仆舒 舒亳仆 (static)  亠从亰亠仄仗仍仆 (instance).
乂仂弍 于亳从仍亳从舒亳 亠从亰亠仄仗仍仆亳亶 仄亠仂亟 亟亠仍亠亞舒 仗仂弍仆仂 亰仆舒亳 仗仂亳仍舒仆仆 仆舒 仂弍从 亟仂
磻仂亞仂 仗亳于磶舒仆亳亶 从仂仆从亠仆亳亶 仄亠仂亟. 丶亠 仗仂亳仍舒仆仆 亰弍亠亞舒 于 舒仄仂仄 仂弍从
亟亠仍亠亞舒舒  于从舒亰 仗亳 亶仂亞仂 于仂亠仆仆.
MyDelegate myDelegate = new MyDelegate(myClass.MyHandler);
亠 myClass  仗仂亳仍舒仆仆 仆舒 亠从亰亠仄仗仍 仂弍从舒,磻亳亶 仗仂于亳仆亠仆 于亳从仂亳仂于于舒亳 仗亳
亰于亠仆亠仆仆 亟仂 仄亠仂亟 MyHandler
亠仍亠亞舒  亠从亰亠仄仗仍仆 仄亠仂亟亳
eleks.com
亠仄仂仆舒 2
 亠仍亠亞舒  亠从亰亠仄仗仍仆亳亶 仄亠仂亟
 仂于舒舒仆仆  亟仂亰于仂仍 仗亳于仂亳 亟亠仍亠亞舒 仄亠仂亟, 亳仗 亠亰仍舒 磻仂亞仂 仄仂亢亠
弍亳 从仍舒 亟仂仆亶 亟仂 从仍舒, 于从舒亰舒仆仂亞仂 于 亟亠仍亠亞舒.
 仂仆于舒舒仆仆 - 亟仂亰于仂仍 仗亳于仂亳 亟亠仍亠亞舒 仄亠仂亟, 亳仗 亠亰仍舒 磻仂亞仂
仄仂亢亠 弍亳 从仍舒 弍舒从于从亳亶 亟仂 从仍舒, 于从舒亰舒仆仂亞仂 于 亟亠仍亠亞舒.
仂于舒舒仆仆  从仂仆于舒舒仆仆
仍舒亳于仂
乂仂弍 于亳从仍亳从舒亳 亠从亰亠仄仗仍仆亳亶 仄亠仂亟 亟亠仍亠亞舒 仗仂弍仆仂 亰仆舒亳 仗仂亳仍舒仆仆 仆舒 仂弍从 亟仂
磻仂亞仂 仗亳于磶舒仆亳亶 从仂仆从亠仆亳亶 仄亠仂亟. 丶亠 仗仂亳仍舒仆仆 亰弍亠亞舒 于 舒仄仂仄 仂弍从
亟亠仍亠亞舒舒  于从舒亰 仗亳 亶仂亞仂 于仂亠仆仆.
public MethodInfo Method { get; }
public object Target { get; }
MulticastDelegate
仂于亠舒 仄亠仂亟, 仆舒 磻亳亶 仗仂亳仍舒 亟亠仍亠亞舒
仂于亠舒 仂弍从, 亟仂 磻仂亞仂 仗亳于磶舒仆亳亶 仄亠仂亟, 仆舒 磻亳亶 仗仂亳仍舒 亟亠仍亠亞舒
MulticastDelegate.Method
亊从仂 亟亠仍亠亞舒 仄亳 弍仍亠 仂亟仆仂亞仂 仗仂亳仍舒仆仆 仆舒 仆从, 仂 于仍舒亳于 仗仂于亠舒亳仄亠
仂舒仆仆 亟仂弍舒于仍亠仆亠 仗仂亳仍舒仆仆.
MulticastDelegate.Target
亊从仂 亟亠仍亠亞舒 仗仂亳仍舒 仆舒 舒亳仆亳亶 仄亠仂亟 , 仂 于仍舒亳于 仗仂于亠仆亠 null. 亊从仂
亟亠仍亠亞舒 仄亳 弍仍亠 仂亟仆仂亞仂 仗仂亳仍舒仆仆 仆舒 仆从, 仂 于仍舒亳于 仗仂于亠仆亠 仂弍从,
仗仂于磶舒仆亳亶 亰 仂舒仆仆仄 于 亠亰 仄亠仂亟仂仄.
MulticastDelegate
eleks.com
亠仄仂仆舒 3
 亳从仂亳舒仆仆 于仍舒亳于仂亠亶 亟亠仍亠亞舒舒
Equality and Inequality Operators
仗亠舒仂亳 于仆仂 ( = = )  仆亠于仆仂 ( ! = ) 亟仂亰于仂仍 于亳亰仆舒亳亳 于仆 亟亠仍亠亞舒于, 亳
仗仂亳仍舒ム 于仂仆亳 仆舒 仂亟仆 亶 亢 舒仄 仆从. 亳 仗仂于仆礌仆 于舒仂于 仆亠 仍从亳
仄亠仂亟, 仆舒 磻亳亶 仗仂亳仍舒 亟亠仍亠亞舒 舒仍亠 亶 仗仂亳仍舒仆仆 仆舒 仂弍从, 亰 磻亳仄 亰于磶舒仆亳亶
仄亠仂亟.
仗亠舒仂亳 仗仂于仆礌仆 亟亠仍亠亞舒于
 Delegate.Combine  仂弍亟仆 亟于舒 舒弍仂 弍仍亠 亟亠仍亠亞舒舒, 于仂ムム亳 仆仂于亳亶 亟亠仍亠亞舒,
仗亳仂从 于亳从仍亳从于 磻仂亞仂 于从仍ム舒 仗亳从亳 仂弍亟仆于舒仆亳 亟亠仍亠亞舒于. 亳亟仆 亟亠仍亠亞舒亳 仆亠
仄仂亟亳从ム.
 Delegate.Remove  于亳亟舒仍 仗亳仂从 于亳从仍亳从于 仂亟仆仂亞仂 亟亠仍亠亞舒舒 亰 仗亳从 于亳从仍亳从于
仆仂亞仂. 亳 仂仄 于仂ム 仆仂于亳亶 亟亠仍亠亞舒, 仗亳仂从 于亳从仍亳从于 磻仂亞仂 磦仍 仂弍仂
亠亰仍舒 于亳亟舒仍亠仆仆. 亳亟仆 亟亠仍亠亞舒亳 仆亠 仄仂亟亳从ム.
亠仂亟亳 亟亠仍亠亞舒于
亳 仄仂亢亠亠 仂仗亠于舒亳 亰 亟亠仍亠亞舒舒仄亳 亰舒 亟仂仗仂仄仂亞仂 亰于亳舒亶仆亳 仂仗亠舒亶 亟仂亟舒于舒仆仆 
于亟仆仄舒仆仆 ( +, -, + =, - = ). 亳 仂仄 从仂仄仗仍仂 舒于仂仄舒亳仆仂 弍亟亠 亞亠仆亠于舒亳 从仂亟, 磻亳亶
亰于亠舒亳仄亠 亟仂 仄亠仂亟于 Combine i Remove.
 Delegate.DynamicInvoke  亟仂亰于仂仍 亟亳仆舒仄仆仂 亰于亠仆亳 亟仂 仆从亶, 仗仂于磶舒仆亳 亰
亟亠仍亠亞舒仂仄.
亠仂亟亳 亟亠仍亠亞舒于
 MulticastDelegate.GetInvocationList  仗仂于亠舒 仗亳仂从 亟亠仍亠亞舒于, 磻 亰仆舒仂亟 于
仗亳从 于亳从仍亳从 亟亠仍亠亞舒于
仂亳仆:
 仂仍亳 于 仗亳从 弍仍亠 仂亟仆 仆从,  于仂仆亳 仗仂于亠舒ム 亰仆舒亠仆仆. 丼亠亠亰 Invoke 仄亳
仂亳仄舒仄仂 仍从亳 亰仆舒亠仆仆 仂舒仆仆仂.
 亊从仂 磻舒 亰 仆从亶 于仗舒亟亠, 仂 仂弍仂舒 仄亠仂亟舒 Invoke 弍亟亠 仗亠亠于舒仆舒  亠舒
仆从亶 弍亟亠 仆亠 于亳从仍亳从舒仆舒.
亠仂亟亳 亟亠仍亠亞舒于
仍仂于 亟亠仍亠亞舒亳
myDelegate = new MyDelegate(SomeMethod);
myDelegate -= new MyDelegate(SomeMethod);
 亠亰仍舒 仄亳 仂亳仄舒仄仂 仆亠 仗亳亶 亟亠仍亠亞舒, 舒 null
丐仂仄 从仂仍亳 亰仆舒亠仆仆 亟亠仍亠亞舒舒 仆亠于亟仂仄亠 于舒仂 于仍舒仂于于舒亳 仗亠亠于从
if (myDelegate != null)
myDelegate("Hello, World!");
弍亟仂于舒仆 亟亠仍亠亞舒亳:
delegate bool Predicate();
delegate bool Predicate<T1>(T1 parameter1);
delegate bool Predicate<T1, T2>(T1 parameter1, T2 paremter2);
delegate bool Predicate<T1, T2, T3>(T2 parameter1, T2 paremter2, T3 parameter3);
delegate T Func<T>(T returnType);
delegate T Func<T, T1>(T returnType, T1 parameter1);
delegate T Func<T, T1, T2>(T returnType, T1 parameter1, T2 paremter2);
delegate T Func<T T1, T2, T3>(T returnType, T1 parameter1, T2 paremter2, T3 parameter3);
delegate void Action();
delegate void Action<T1>(T1 parameter1);
delegate void Action<T1, T2>(T1 parameter1, T2 paremter2);
delegate void Action<T1, T2, T3>(T1 parameter1, T2 paremter2, T3 parameter3);
eleks.com
亠仄仂仆舒 4
 GetInvocationList
eleks.com
亠亠亳于亳从 5于
delegate void Anonim(); // 弌亳亞仆舒舒 亟亠仍亠亞舒舒
// 于亳从仂亳仂于仄仂 舒仆仂仆仄仆亳亶 仄亠仂亟
Anonim anonim = delegate{
DirectoryInfo dir = new DirectoryInfo("D:");
foreach (DirectoryInfo d in dir.GetDirectories())
Console.WriteLine(d.Name);
};
anonim(); // 亰舒仗从舒仄仂
仆仂仆仄仆 仄亠仂亟亳
delegate void Anonim2( int start, int finish); // 弌亳亞仆舒舒 亟亠仍亠亞舒舒
// 于亳从仂亳仂于仄仂 舒仆仂仆仄仆亳亶 仄亠仂亟 亰 仗舒舒仄亠舒仄亳
Anonim2 anonim2 = delegate(int a, int b) {
for (int i = a; i <= b; i++)
Console.Write(束仗舒仂于舒仆仂 {0} 舒仆从亠." +
" 舒仍亳亳仍仂 仂仗舒ミ火委亳 {1}n", i, b-i);
};
anonim2(1, 10);
仆仂仆仄仆 仄亠仂亟亳 亰 仗舒舒仄亠舒仄亳
 礆弍亟舒 于亳舒亰  亠 舒仆仂仆仄仆舒 仆从, 磻舒 仄亳 于亳舒亰亳 舒 仂仗亠舒仂亳  仄仂亢亠 弍亳
于亳从仂亳舒仆舒 亟仍 于仂亠仆仆 亟亠仍亠亞舒于 舒弍仂 亳仗于 亟亠亠于舒 于亳舒亰于.
舒舒仄亠亳 => 亳从仂仆于舒仆亳亶 从仂亟
( x, y ) => { return x + y }
( x, y )  仗舒舒仄亠亳, => - 仍礆弍亟舒-仂仗亠舒仂, { return x + y } - 仍仂 仄亠仂亟
 仆亳亶 仗仂弍 于仂亠仆仆 舒仆仂仆仄仆亳 仆从亶, 仄仂亢亠 弍亳 仗亳于仂仆亳亶 亟亠仍亠亞舒
礆弍亟舒 于亳舒亰亳
delegate int LambdaDelegate ( int step ); // 亳亞仆舒舒 亟亠仍亠亞舒舒
LambdaDelegate lambdaDel = a => ++a;
// LambdaDelegate lambdaDel = (int a) => ++a;
int step = 1;
int finish = 10;
while (step <= finish)
{
Console.Write(束弍仂弍仍亠仆仂 {0} 亟仂从仄亠仆于." + " 亰舒仍亳亳仍仂 {1}n", step, finish - step);
step = lambdaDel(step);
}
*乂仂 弍亟亠 磻仂 亰舒仄仆亳亳 ++舒 仆舒 舒++ ?
礆弍亟舒 于亳舒亰亳 (仂亟亳仆仂仆)
礆弍亟舒  仂仗亠舒仂亳: (input parameters) => {statements;}
delegate int Power ( int change); // 亳亞仆舒舒 亟亠仍亠亞舒舒
Power lambdaDel = change =>
{
if (change != 0)
return change * change;
return 0;
}
Console.WriteLine( Power ( 10 ) );
礆弍亟舒 仂仗亠舒仂亳 (弍仍仂从仂于 于亳舒亰亳)
eleks.com
Summary
仂亟  舒于仂仄舒亳仆亠 仂仗仂于亠仆仆 仗仂 亠, 仂 舒仍舒 磻舒 亟.
仂亟 亟ム 仗仂 仆舒仗仆仂仄 仗亳仆亳仗: 仂弍从, 磻亳亶 仗仂磦仍 从舒于 亟仂
仗仂亟, 亠 仂弍仂弍仆亳从  仗仂亟.
仂仍亳 仗仂亟 舒, 于亳从仍亳从舒ム 于 亰舒亠仂于舒仆 仂弍仂弍仆亳从亳 
仗仂亟.
弍仂弍仆亳从亳 亰舒亰于亳舒亶 仗亠亟舒于仍亠仆 亟亠仍亠亞舒舒仄亳.
仂亟 (Events)
delegate void ClickHandler();
class Button
{
public ClickHandler Click;
void OnMsg(...)
{
switch(msg)
{
case WM_LBUTTONDOWN:
if (Click != null)
Click();
}
}
};
亳从仍舒亟 仗仂亟 仆舒 仂仆仂于 亟亠仍亠亞舒舒
event 亟亠仍亠亞舒_仗仂亟 仄_仗仂亟;
丶亠 于于亠亟亠仆亠 于 .NET 仗仂仍亠-仗仂亟, 磻 舒于仂仄舒亳仆仂 于于仂亟亳
仗仂仍亠-亟亠仍亠亞舒  亟于舒 亟仂亟舒从仂于亳 仄亠仂亟, 磻 亶仂亞仂
仂弍仍亞仂于ム.
仂亟 (Events)
eleks.com
亠仄仂仆舒 5
 Events
eleks.com
亠仄仂仆舒 6
 从亰亠仄仗仍仆亳亶 仄亠仂亟 于 磻仂 仂弍仂弍仆亳从舒
public event EventHandler<MyEventArgs> SomeEvent;
弌亠亠亟仂于亳亠 .NET 仆舒亟舒 于弍亟仂于舒仆亳亶 亰舒亞舒仍仆亠仆亳亶 亟亠仍亠亞舒 EventHandler.
亠从仂仄亠仆亟 于亳从仂亳仂于于舒亳 舒仄亠 舒从亳亶 仗仂弍, 舒 仆亠 于亳亰仆舒舒亳 于仍舒仆亳亶 亟亠仍亠亞舒.
EventHandler<TEventArgs>
public delegate void EventHandler(
object sender, // 仂亳仍舒仆仆 仆舒 仂弍从, 仂 于亳从仍亳从舒于 仗仂亟
EventArgs e // 舒舒仄亠亳, 磻 仂仗亳ム 仗仂亟
);
EventArgs 仆亠 仄亳 亢仂亟仆仂亞仂 仗仂仍, 磻亠 弍 仗亠亠亟舒于舒仍仂 从仂亳仆 仆仂仄舒.
乂仂弍 仗亠亠亟舒亳 亟仂亟舒从仂于 仆仂仄舒 亠亠亰 EventArgs, 于于仂亟亳 仆仂于亳亶 从仍舒,
亟仂仆亳亶 亟仍 仆仂亞仂.
弌舒仆亟舒仆亳亶 亟亠仍亠亞舒
eleks.com
亠仄仂仆舒 7
 弌从仍舒亟仆亳亶 仗亳从仍舒亟 仂弍仂弍仆亳从舒 仗仂亟亶
 仂亰于仂仍ム 亟仂亟舒于舒亳 仆仂于 仄亠仂亟亳 于 于亢亠 仆ム 亳仗亳, 弍亠亰 于仂亠仆仆 于仍舒仆仂亞仂
从仍舒舒.
 亠仂亟 仂亰亳亠仆仆 仄舒 亟仂仗 仍从亳 亟仂 仗弍仍仆亳 仍亠仆于 从仍舒.
 亊从仂  于弍亟仂于舒仆亳亶 仄亠仂亟  仂亰亳亠仆仆, 仗仂亳亠 仆舒亟舒 于弍亟仂于舒仆仂仄 仄亠仂亟
 亠仂亟亳 仂亰亳亠仆仆 亳仂从仂 于亳从仂亳仂于ム 于 LINQ.
Extension methods
Example
public static class StringExtension
{
public static int WordCount(this string str, char c)
{
int counter = 0;
for (int i = 0; i<str.Length; i++)
{
if (str[i] == c)
counter++;
}
return counter;
}
}
int i = s.WordCount(c);
eleks.com
亠仄仂仆舒 8
 Extension methods
 LINQ (Language-Integrated Query)  仄仂于舒 仆亠亞仂于舒仆亳 亰舒仗亳于, 亟仂亰于仂仍
于亳亟仂弍于舒亳 仆仂仄舒 亰 亰仆亳 亟亢亠亠仍 亟舒仆亳.
 舒ム 亰 XML, SQL, ADO.NET, .NET Collections.
 仂弍亳 亰舒仗亳* 舒亳仆仂 仄仂于亳 仗仂亞舒仄于舒仆仆.
 仂仄仗仂仆亠仆 .NET Framework 3.5
*舒仗亳  于亳舒亰, 磻亳亶 亟舒 亟舒仆 亰 亟亢亠亠仍舒 亟舒仆亳.
LINQ
OthersC# VB.NET
.NET Language Integrated Query (LINQ)
LINQ
to SQL
LINQ
to Objects
LINQ
to XML
LINQ
to Datasets
LINQ
to Entities
LINQ data source providers
ADO.NET support for LINQ
 舒亶仗仂亠 于亳亰仆舒亠仆仆 亰舒仗亳舒 LINQ
from 亰仄仆仆舒 in 仆舒弍-仂弍从于
select 亰仄仆仆舒;
舒仗亳亳 LINQ
 弍从亳 于亳从仂亳仂于ム 亳从仍亳  仄仂于亳
foreach(Customer c in customers) if (c.Region == "UK") ...
 舒亰亳 亟舒仆亳 于亳从仂亳仂于ム SQL
SELECT * FROM Customers WHERE Region='UK'
 XML 于亳从仂亳仂于 XPath/XQuery
//Customers/Customer[@Region='UK']
舒仗亳亳 弍亠亰 LINQ
舒仗亳亳 亰 LINQ
var myCustomers = from c in customers
where c.Region == "UK"
select c;
var goodCusts = (from c in db.Customers
where c.PostCode.StartsWith("GY")
orderby c.Sales descending
select c).Skip(10).Take(10);
仗亠舒仂亳 LINQ
丐亳仗 仂仗亠舒仂舒 亰舒仗亳 仗亠舒仂亳 亰舒仗亳
弍仄亠亢亠仆仆 Where, OfType
仂亠从 Select, SelectMany
弍亟仆舒仆仆 Join, GroupJoin
仂仆从舒亳仆舒 Concat
弌仂于舒仆仆 OrderBy, OrderByDescending, ThenBy, ThenByDescending, Reverse
丕舒仆仂于从舒 Distinct, Except, Intersect, Union
仗于舒仆仆 GroupBy
亠亠于仂亠仆仆 AsEnumerable, Cast, OfType, ToArray, ToDictionary, ToList, ToLookup
仂于仆礌仆 SequenceEqual
亳弍 亠仍亠仄亠仆舒 DefaultIfEmpty, ElementAt, ElementAtOrDefault, First, FirstOrDefault, Last, LastOrDefault, Single,
SingleOrDefault
丕于仂亠仆仆 Empty, Range, Repeat
仍从仆亠 于亳亰仆舒亠仆仆 All, Any, Contains
亞亠亞舒 Aggregate, Average, Count, LongCount, Max, Min, Sum
舒亰仄亠从舒 Skip, SkipWhile, Take, Takewhile
 仄 舒仆亟舒仆仂亞仂 亳仆舒从亳 from .. in .. select 亟仍 于仂亠仆仆 亰舒仗亳
LINQ 仄亳 仄仂亢亠仄仂 亰舒仂仂于于舒亳 仗亠舒仍仆 仄亠仂亟亳 仂亰亳亠仆仆, 磻
于亳亰仆舒亠仆 于 仆亠亠亶 IEnumerable.
 亠 从仂亢亠仆 仄亠仂亟 仂亰亳亠仆仆 仄舒 舒仆舒仍仂亞 亠亠亟 仂仗亠舒仂于 LINQ, 于
仂仄 于亳仗舒亟从 仄仂亢仆舒 亰舒仂仂于于舒亳 仂弍亳亟于舒 仗亟仂亟亳.
string[] teams = { "舒于舒", "仂", "亠舒仍 舒亟亳亟", "舒仆亠亠 弌", "舒亠仍仂仆舒" };
int number = (from t in teams where t.ToUpper().StartsWith("") select t).Count();
亠仂亟亳 仂亰亳亠仆仆 LINQ
var contacts =
from c in customers
where c.City == "Hove"
select new { c.Name, c.Phone };
var contacts =
customers
.Where(c => c.City == "Hove")
.Select(c => new { c.Name, c.Phone });
Extension
methods
Lambda
expressions
Query expressions
Object initializersAnonymous
types
Local variable type
inference
eleks.com
亠仄仂仆舒 10
 仂弍仂舒 亰 LINQ
息 Denys Prylutskyi, 2015
舒从亳仆亠 亰舒于亟舒仆仆
亠从仂仄亠仆亟仂于舒仆舒 仍亠舒舒
1. R. Sedgewick Algorithms
2. A. Troelsen C# 6.0 and the .NET 4.6 Framework
3. H. Schildt C# 4.0 The Complete Reference
4. J. Richter CLR via C#
5. J. Skeet C# in Depth
6. Stackoverflow.com
Ad

Recommended

Riesgo ergon坦mico
spgiunc
INDUCCION GENERAL SSO CCECC.pptx
CristhianHernndezcas
If unit2 summary
If unit2 summary
eleksdev
Improving rpc bkp
Improving rpc bkp
eleksdev
Advanced styles
Advanced styles
eleksdev
Sql 04n edited
Sql 04n edited
eleksdev
SQL: Indexes, Select operator
SQL: Indexes, Select operator
eleksdev
Unit1 summary
Unit1 summary
eleksdev
Version control
Version control
eleksdev
SQL Grouping, Joins
SQL Grouping, Joins
eleksdev
SDLC. QA Role
SDLC. QA Role
eleksdev
Mvvw patterns
Mvvw patterns
eleksdev
Code Practices
Code Practices
eleksdev
Rpc
Rpc
eleksdev
SDLC. PM Role
SDLC. PM Role
eleksdev
tsql
tsql
eleksdev
#4 code quality
#4 code quality
eleksdev
DAL
DAL
eleksdev
Frontend basics
Frontend basics
eleksdev
Design patterns
Design patterns
eleksdev
#2 integration + ui tests
#2 integration + ui tests
eleksdev
Advanced c sharp part 3
Advanced c sharp part 3
eleksdev
Windows service
Windows service
eleksdev
Web service lecture
Web service lecture
eleksdev
Angular. presentation
Angular. presentation
eleksdev
Css animation, html5 api
Css animation, html5 api
eleksdev
Communication in android
Communication in android
eleksdev
NoSQL basics
NoSQL basics
eleksdev
NET Framework and C# Module 6. Delegates, Events
NET Framework and C# Module 6. Delegates, Events
Andrii Hladkyi
Net framework c# module 12
Net framework c# module 12
Andrii Hladkyi

More Related Content

Viewers also liked (20)

Version control
Version control
eleksdev
SQL Grouping, Joins
SQL Grouping, Joins
eleksdev
SDLC. QA Role
SDLC. QA Role
eleksdev
Mvvw patterns
Mvvw patterns
eleksdev
Code Practices
Code Practices
eleksdev
Rpc
Rpc
eleksdev
SDLC. PM Role
SDLC. PM Role
eleksdev
tsql
tsql
eleksdev
#4 code quality
#4 code quality
eleksdev
DAL
DAL
eleksdev
Frontend basics
Frontend basics
eleksdev
Design patterns
Design patterns
eleksdev
#2 integration + ui tests
#2 integration + ui tests
eleksdev
Advanced c sharp part 3
Advanced c sharp part 3
eleksdev
Windows service
Windows service
eleksdev
Web service lecture
Web service lecture
eleksdev
Angular. presentation
Angular. presentation
eleksdev
Css animation, html5 api
Css animation, html5 api
eleksdev
Communication in android
Communication in android
eleksdev
NoSQL basics
NoSQL basics
eleksdev
Version control
Version control
eleksdev
SQL Grouping, Joins
SQL Grouping, Joins
eleksdev
SDLC. QA Role
SDLC. QA Role
eleksdev
Mvvw patterns
Mvvw patterns
eleksdev
Code Practices
Code Practices
eleksdev
SDLC. PM Role
SDLC. PM Role
eleksdev
#4 code quality
#4 code quality
eleksdev
Frontend basics
Frontend basics
eleksdev
Design patterns
Design patterns
eleksdev
#2 integration + ui tests
#2 integration + ui tests
eleksdev
Advanced c sharp part 3
Advanced c sharp part 3
eleksdev
Windows service
Windows service
eleksdev
Web service lecture
Web service lecture
eleksdev
Angular. presentation
Angular. presentation
eleksdev
Css animation, html5 api
Css animation, html5 api
eleksdev
Communication in android
Communication in android
eleksdev
NoSQL basics
NoSQL basics
eleksdev

Similar to Advanced C#. Part 2 (15)

NET Framework and C# Module 6. Delegates, Events
NET Framework and C# Module 6. Delegates, Events
Andrii Hladkyi
Net framework c# module 12
Net framework c# module 12
Andrii Hladkyi
亠亰亠仆舒亳勀于喝仆仂于仂仄喝亳仍亠喝仗仂喝亟亠仍亠亞舒.沿沿岳恰
亠亰亠仆舒亳勀于喝仆仂于仂仄喝亳仍亠喝仗仂喝亟亠仍亠亞舒.沿沿岳恰
ladygindmitrij521
Net Framework and C# Module 3 4. Inheritance, Abstractions
Net Framework and C# Module 3 4. Inheritance, Abstractions
Andrii Hladkyi
Net framework c# lesson1
Net framework c# lesson1
Andrii Hladkyi
仍舒弍. 仂弍. 2 仂弍从亳 舒 亠于亳 仂 仆亳仄亳 仆舒亟舒ム
仍舒弍. 仂弍. 2 仂弍从亳 舒 亠于亳 仂 仆亳仄亳 仆舒亟舒ム
cit-cit
Net Framework and c# module 2. OOP
Net Framework and c# module 2. OOP
Andrii Hladkyi
Lec12 从仂亳于舒从i 亠仍亠仄亠仆亳 从亠于舒仆仆 ed
Lec12 从仂亳于舒从i 亠仍亠仄亠仆亳 从亠于舒仆仆 ed
cit-cit
Net framework c# module 9
Net framework c# module 9
Andrii Hladkyi
Net framework c# lesson1
Net framework c# lesson1
Andrii Hladkyi
Lec11 从仂亳于舒从i 亠仍亠仄亠仆亳 从亠于舒仆仆
Lec11 从仂亳于舒从i 亠仍亠仄亠仆亳 从亠于舒仆仆
cit-cit
Net framework c# module 4
Net framework c# module 4
Andrii Hladkyi
Net Framework and c# Lesson 1
Net Framework and c# Lesson 1
Andrii Hladkyi
System programing module 1. Processes
System programing module 1. Processes
Andrii Hladkyi
NET Framework and C# Module 6. Delegates, Events
NET Framework and C# Module 6. Delegates, Events
Andrii Hladkyi
Net framework c# module 12
Net framework c# module 12
Andrii Hladkyi
亠亰亠仆舒亳勀于喝仆仂于仂仄喝亳仍亠喝仗仂喝亟亠仍亠亞舒.沿沿岳恰
亠亰亠仆舒亳勀于喝仆仂于仂仄喝亳仍亠喝仗仂喝亟亠仍亠亞舒.沿沿岳恰
ladygindmitrij521
Net Framework and C# Module 3 4. Inheritance, Abstractions
Net Framework and C# Module 3 4. Inheritance, Abstractions
Andrii Hladkyi
Net framework c# lesson1
Net framework c# lesson1
Andrii Hladkyi
仍舒弍. 仂弍. 2 仂弍从亳 舒 亠于亳 仂 仆亳仄亳 仆舒亟舒ム
仍舒弍. 仂弍. 2 仂弍从亳 舒 亠于亳 仂 仆亳仄亳 仆舒亟舒ム
cit-cit
Net Framework and c# module 2. OOP
Net Framework and c# module 2. OOP
Andrii Hladkyi
Lec12 从仂亳于舒从i 亠仍亠仄亠仆亳 从亠于舒仆仆 ed
Lec12 从仂亳于舒从i 亠仍亠仄亠仆亳 从亠于舒仆仆 ed
cit-cit
Net framework c# module 9
Net framework c# module 9
Andrii Hladkyi
Net framework c# lesson1
Net framework c# lesson1
Andrii Hladkyi
Lec11 从仂亳于舒从i 亠仍亠仄亠仆亳 从亠于舒仆仆
Lec11 从仂亳于舒从i 亠仍亠仄亠仆亳 从亠于舒仆仆
cit-cit
Net framework c# module 4
Net framework c# module 4
Andrii Hladkyi
Net Framework and c# Lesson 1
Net Framework and c# Lesson 1
Andrii Hladkyi
System programing module 1. Processes
System programing module 1. Processes
Andrii Hladkyi
Ad

More from eleksdev (11)

Lecture android best practices
Lecture android best practices
eleksdev
Hello android world
Hello android world
eleksdev
Android location and sensors API
Android location and sensors API
eleksdev
Lecture java basics
Lecture java basics
eleksdev
G rpc lection1_theory_bkp2
G rpc lection1_theory_bkp2
eleksdev
G rpc lection1
G rpc lection1
eleksdev
Aspnet core
Aspnet core
eleksdev
Continuous Delivery concept overview. Continuous Integration Systems. DevOps ...
Continuous Delivery concept overview. Continuous Integration Systems. DevOps ...
eleksdev
SDLC. UX Role
SDLC. UX Role
eleksdev
SDLC. BA Role
SDLC. BA Role
eleksdev
sql introduction
sql introduction
eleksdev
Lecture android best practices
Lecture android best practices
eleksdev
Hello android world
Hello android world
eleksdev
Android location and sensors API
Android location and sensors API
eleksdev
Lecture java basics
Lecture java basics
eleksdev
G rpc lection1_theory_bkp2
G rpc lection1_theory_bkp2
eleksdev
G rpc lection1
G rpc lection1
eleksdev
Aspnet core
Aspnet core
eleksdev
Continuous Delivery concept overview. Continuous Integration Systems. DevOps ...
Continuous Delivery concept overview. Continuous Integration Systems. DevOps ...
eleksdev
SDLC. UX Role
SDLC. UX Role
eleksdev
SDLC. BA Role
SDLC. BA Role
eleksdev
sql introduction
sql introduction
eleksdev
Ad

Advanced C#. Part 2

  • 1. eleks.comeleks.com Advanced C#. Part 2 Events and Delegates. Anonimous methods. Lamda Expressions. LINQ
  • 2. 亠仍亠亞舒亳 public abstract class Delegate : ICloneable, ISerializable
  • 3. 亠仍亠亞舒亳 亠仍亠亞舒亳 于从舒亰于仆亳从亳 仆舒 仄亠仂亟亳, 磻 仆从舒仗仍ムム 仗舒于亢仆 于从舒亰于仆亳从亳 仆舒亟舒ム 亰仆 亠于亳 亟仍 仂弍仂亳 亰 仆亳仄亳. 亠仍亠亞舒亳 仂弍从舒仄亳 亳仗 System.Delegate 舒弍仂 System.MulticastDelegate. System.Delegate (obsolete) - 仍从亳 仂亟仆亠 仗仂亳仍舒仆仆 仆舒 仄亠仂亟 System.MulticastDelegate 从仍从舒 仗仂亳仍舒仆 仆舒 仄亠仂亟, 磻 于亳从仍亳从舒ム 仗仂 仍舒仆ミ勤済
  • 4. 亳 仂仗亳 亟亠仍亠亞舒亳 仄亳 于从舒亰仄仂 仗仂仂亳仗 仄亠仂亟, 仆舒 磻亳亶 弍亟 仗仂亳仍舒亳 亠从亰亠仄仗仍亳 亟舒仆仂亞仂 亟亠仍亠亞舒舒. public delegate void MyDelegate (string s); 亟亠 MyDelegate 仆舒亰于舒 亟亠仍亠亞舒舒 (仆舒亰于舒 亳仗), void 亳仗 仂 仄舒ム 仗仂于亠舒亳 仆从, string 亳仗 舒亞仄亠仆舒 仆从亶 弌舒仄 仗仂 仂弍 亟亠仍亠亞舒 磦仍 亳仗仂仄 亢仂亟仆亳 仗仂亳仍舒仆 仆舒 仄亠仂亟 仄亳亳 仆亠 仄仂亢亠 , 于亟仗仂于亟仆仂, 仆亠 仄仂亢亠 于亳从仂亳仂于于舒亳 亟仍 亰于亠仆亠仆仆 亟仂 仆亳. 亞仂仍仂亠仆仆 亟亠仍亠亞舒舒
  • 5. MyDelegate delegate1 = new MyDelegate(MyHandler); 亠 MyDelegate 亳仗 亟亠仍亠亞舒舒, delegate1 亠从亰亠仄仗仍 亟亠仍亠亞舒舒, 磻亳亶 弍亟亠 于仂亠仆亳亶 于 亠亰仍舒 于亳从仂仆舒仆仆 从仂仆从, MyHendler 仄亠仂亟, 仆舒 磻亳亶 弍亟亠 仗仂亳仍舒亳 亟亠仍亠亞舒. 仍 于仂亠仆仆 亟亠仍亠亞舒舒 仄亳 仄仂亢亠仄仂 亰于亠舒亳 亟仂 仄亠仂亟于, 仆舒 磻 于仆 仗仂亳仍舒. 仂 亟亠仍亠亞舒舒 仄仂亢仆舒 亰于亠舒亳 磻 亟仂 舒仄仂亞仂 仄亠仂亟舒: delegate1(Hello World); 弌于仂亠仆仆 亠从亰亠仄仗仍舒 亟亠仍亠亞舒舒
  • 6. eleks.com 亠仄仂仆舒 1 舒亶仗仂亳亶 仗亳从仍舒亟 仂弍仂亳 亰 亟亠仍亠亞舒舒仄亳
  • 8. 亠仂亟亳 于 .Net 亟仍 仆舒 舒亳仆 (static) 亠从亰亠仄仗仍仆 (instance). 乂仂弍 于亳从仍亳从舒亳 亠从亰亠仄仗仍仆亳亶 仄亠仂亟 亟亠仍亠亞舒 仗仂弍仆仂 亰仆舒亳 仗仂亳仍舒仆仆 仆舒 仂弍从 亟仂 磻仂亞仂 仗亳于磶舒仆亳亶 从仂仆从亠仆亳亶 仄亠仂亟. 丶亠 仗仂亳仍舒仆仆 亰弍亠亞舒 于 舒仄仂仄 仂弍从 亟亠仍亠亞舒舒 于从舒亰 仗亳 亶仂亞仂 于仂亠仆仆. MyDelegate myDelegate = new MyDelegate(myClass.MyHandler); 亠 myClass 仗仂亳仍舒仆仆 仆舒 亠从亰亠仄仗仍 仂弍从舒,磻亳亶 仗仂于亳仆亠仆 于亳从仂亳仂于于舒亳 仗亳 亰于亠仆亠仆仆 亟仂 仄亠仂亟 MyHandler 亠仍亠亞舒 亠从亰亠仄仗仍仆 仄亠仂亟亳
  • 9. eleks.com 亠仄仂仆舒 2 亠仍亠亞舒 亠从亰亠仄仗仍仆亳亶 仄亠仂亟
  • 10. 仂于舒舒仆仆 亟仂亰于仂仍 仗亳于仂亳 亟亠仍亠亞舒 仄亠仂亟, 亳仗 亠亰仍舒 磻仂亞仂 仄仂亢亠 弍亳 从仍舒 亟仂仆亶 亟仂 从仍舒, 于从舒亰舒仆仂亞仂 于 亟亠仍亠亞舒. 仂仆于舒舒仆仆 - 亟仂亰于仂仍 仗亳于仂亳 亟亠仍亠亞舒 仄亠仂亟, 亳仗 亠亰仍舒 磻仂亞仂 仄仂亢亠 弍亳 从仍舒 弍舒从于从亳亶 亟仂 从仍舒, 于从舒亰舒仆仂亞仂 于 亟亠仍亠亞舒. 仂于舒舒仆仆 从仂仆于舒舒仆仆
  • 11. 仍舒亳于仂 乂仂弍 于亳从仍亳从舒亳 亠从亰亠仄仗仍仆亳亶 仄亠仂亟 亟亠仍亠亞舒 仗仂弍仆仂 亰仆舒亳 仗仂亳仍舒仆仆 仆舒 仂弍从 亟仂 磻仂亞仂 仗亳于磶舒仆亳亶 从仂仆从亠仆亳亶 仄亠仂亟. 丶亠 仗仂亳仍舒仆仆 亰弍亠亞舒 于 舒仄仂仄 仂弍从 亟亠仍亠亞舒舒 于从舒亰 仗亳 亶仂亞仂 于仂亠仆仆. public MethodInfo Method { get; } public object Target { get; } MulticastDelegate 仂于亠舒 仄亠仂亟, 仆舒 磻亳亶 仗仂亳仍舒 亟亠仍亠亞舒 仂于亠舒 仂弍从, 亟仂 磻仂亞仂 仗亳于磶舒仆亳亶 仄亠仂亟, 仆舒 磻亳亶 仗仂亳仍舒 亟亠仍亠亞舒
  • 12. MulticastDelegate.Method 亊从仂 亟亠仍亠亞舒 仄亳 弍仍亠 仂亟仆仂亞仂 仗仂亳仍舒仆仆 仆舒 仆从, 仂 于仍舒亳于 仗仂于亠舒亳仄亠 仂舒仆仆 亟仂弍舒于仍亠仆亠 仗仂亳仍舒仆仆. MulticastDelegate.Target 亊从仂 亟亠仍亠亞舒 仗仂亳仍舒 仆舒 舒亳仆亳亶 仄亠仂亟 , 仂 于仍舒亳于 仗仂于亠仆亠 null. 亊从仂 亟亠仍亠亞舒 仄亳 弍仍亠 仂亟仆仂亞仂 仗仂亳仍舒仆仆 仆舒 仆从, 仂 于仍舒亳于 仗仂于亠仆亠 仂弍从, 仗仂于磶舒仆亳亶 亰 仂舒仆仆仄 于 亠亰 仄亠仂亟仂仄. MulticastDelegate
  • 13. eleks.com 亠仄仂仆舒 3 亳从仂亳舒仆仆 于仍舒亳于仂亠亶 亟亠仍亠亞舒舒
  • 14. Equality and Inequality Operators 仗亠舒仂亳 于仆仂 ( = = ) 仆亠于仆仂 ( ! = ) 亟仂亰于仂仍 于亳亰仆舒亳亳 于仆 亟亠仍亠亞舒于, 亳 仗仂亳仍舒ム 于仂仆亳 仆舒 仂亟仆 亶 亢 舒仄 仆从. 亳 仗仂于仆礌仆 于舒仂于 仆亠 仍从亳 仄亠仂亟, 仆舒 磻亳亶 仗仂亳仍舒 亟亠仍亠亞舒 舒仍亠 亶 仗仂亳仍舒仆仆 仆舒 仂弍从, 亰 磻亳仄 亰于磶舒仆亳亶 仄亠仂亟. 仗亠舒仂亳 仗仂于仆礌仆 亟亠仍亠亞舒于
  • 15. Delegate.Combine 仂弍亟仆 亟于舒 舒弍仂 弍仍亠 亟亠仍亠亞舒舒, 于仂ムム亳 仆仂于亳亶 亟亠仍亠亞舒, 仗亳仂从 于亳从仍亳从于 磻仂亞仂 于从仍ム舒 仗亳从亳 仂弍亟仆于舒仆亳 亟亠仍亠亞舒于. 亳亟仆 亟亠仍亠亞舒亳 仆亠 仄仂亟亳从ム. Delegate.Remove 于亳亟舒仍 仗亳仂从 于亳从仍亳从于 仂亟仆仂亞仂 亟亠仍亠亞舒舒 亰 仗亳从 于亳从仍亳从于 仆仂亞仂. 亳 仂仄 于仂ム 仆仂于亳亶 亟亠仍亠亞舒, 仗亳仂从 于亳从仍亳从于 磻仂亞仂 磦仍 仂弍仂 亠亰仍舒 于亳亟舒仍亠仆仆. 亳亟仆 亟亠仍亠亞舒亳 仆亠 仄仂亟亳从ム. 亠仂亟亳 亟亠仍亠亞舒于
  • 16. 亳 仄仂亢亠亠 仂仗亠于舒亳 亰 亟亠仍亠亞舒舒仄亳 亰舒 亟仂仗仂仄仂亞仂 亰于亳舒亶仆亳 仂仗亠舒亶 亟仂亟舒于舒仆仆 于亟仆仄舒仆仆 ( +, -, + =, - = ). 亳 仂仄 从仂仄仗仍仂 舒于仂仄舒亳仆仂 弍亟亠 亞亠仆亠于舒亳 从仂亟, 磻亳亶 亰于亠舒亳仄亠 亟仂 仄亠仂亟于 Combine i Remove. Delegate.DynamicInvoke 亟仂亰于仂仍 亟亳仆舒仄仆仂 亰于亠仆亳 亟仂 仆从亶, 仗仂于磶舒仆亳 亰 亟亠仍亠亞舒仂仄. 亠仂亟亳 亟亠仍亠亞舒于
  • 17. MulticastDelegate.GetInvocationList 仗仂于亠舒 仗亳仂从 亟亠仍亠亞舒于, 磻 亰仆舒仂亟 于 仗亳从 于亳从仍亳从 亟亠仍亠亞舒于 仂亳仆: 仂仍亳 于 仗亳从 弍仍亠 仂亟仆 仆从, 于仂仆亳 仗仂于亠舒ム 亰仆舒亠仆仆. 丼亠亠亰 Invoke 仄亳 仂亳仄舒仄仂 仍从亳 亰仆舒亠仆仆 仂舒仆仆仂. 亊从仂 磻舒 亰 仆从亶 于仗舒亟亠, 仂 仂弍仂舒 仄亠仂亟舒 Invoke 弍亟亠 仗亠亠于舒仆舒 亠舒 仆从亶 弍亟亠 仆亠 于亳从仍亳从舒仆舒. 亠仂亟亳 亟亠仍亠亞舒于
  • 18. 仍仂于 亟亠仍亠亞舒亳 myDelegate = new MyDelegate(SomeMethod); myDelegate -= new MyDelegate(SomeMethod); 亠亰仍舒 仄亳 仂亳仄舒仄仂 仆亠 仗亳亶 亟亠仍亠亞舒, 舒 null 丐仂仄 从仂仍亳 亰仆舒亠仆仆 亟亠仍亠亞舒舒 仆亠于亟仂仄亠 于舒仂 于仍舒仂于于舒亳 仗亠亠于从 if (myDelegate != null) myDelegate("Hello, World!");
  • 19. 弍亟仂于舒仆 亟亠仍亠亞舒亳: delegate bool Predicate(); delegate bool Predicate<T1>(T1 parameter1); delegate bool Predicate<T1, T2>(T1 parameter1, T2 paremter2); delegate bool Predicate<T1, T2, T3>(T2 parameter1, T2 paremter2, T3 parameter3); delegate T Func<T>(T returnType); delegate T Func<T, T1>(T returnType, T1 parameter1); delegate T Func<T, T1, T2>(T returnType, T1 parameter1, T2 paremter2); delegate T Func<T T1, T2, T3>(T returnType, T1 parameter1, T2 paremter2, T3 parameter3); delegate void Action(); delegate void Action<T1>(T1 parameter1); delegate void Action<T1, T2>(T1 parameter1, T2 paremter2); delegate void Action<T1, T2, T3>(T1 parameter1, T2 paremter2, T3 parameter3);
  • 22. delegate void Anonim(); // 弌亳亞仆舒舒 亟亠仍亠亞舒舒 // 于亳从仂亳仂于仄仂 舒仆仂仆仄仆亳亶 仄亠仂亟 Anonim anonim = delegate{ DirectoryInfo dir = new DirectoryInfo("D:"); foreach (DirectoryInfo d in dir.GetDirectories()) Console.WriteLine(d.Name); }; anonim(); // 亰舒仗从舒仄仂 仆仂仆仄仆 仄亠仂亟亳
  • 23. delegate void Anonim2( int start, int finish); // 弌亳亞仆舒舒 亟亠仍亠亞舒舒 // 于亳从仂亳仂于仄仂 舒仆仂仆仄仆亳亶 仄亠仂亟 亰 仗舒舒仄亠舒仄亳 Anonim2 anonim2 = delegate(int a, int b) { for (int i = a; i <= b; i++) Console.Write(束仗舒仂于舒仆仂 {0} 舒仆从亠." + " 舒仍亳亳仍仂 仂仗舒ミ火委亳 {1}n", i, b-i); }; anonim2(1, 10); 仆仂仆仄仆 仄亠仂亟亳 亰 仗舒舒仄亠舒仄亳
  • 24. 礆弍亟舒 于亳舒亰 亠 舒仆仂仆仄仆舒 仆从, 磻舒 仄亳 于亳舒亰亳 舒 仂仗亠舒仂亳 仄仂亢亠 弍亳 于亳从仂亳舒仆舒 亟仍 于仂亠仆仆 亟亠仍亠亞舒于 舒弍仂 亳仗于 亟亠亠于舒 于亳舒亰于. 舒舒仄亠亳 => 亳从仂仆于舒仆亳亶 从仂亟 ( x, y ) => { return x + y } ( x, y ) 仗舒舒仄亠亳, => - 仍礆弍亟舒-仂仗亠舒仂, { return x + y } - 仍仂 仄亠仂亟 仆亳亶 仗仂弍 于仂亠仆仆 舒仆仂仆仄仆亳 仆从亶, 仄仂亢亠 弍亳 仗亳于仂仆亳亶 亟亠仍亠亞舒 礆弍亟舒 于亳舒亰亳
  • 25. delegate int LambdaDelegate ( int step ); // 亳亞仆舒舒 亟亠仍亠亞舒舒 LambdaDelegate lambdaDel = a => ++a; // LambdaDelegate lambdaDel = (int a) => ++a; int step = 1; int finish = 10; while (step <= finish) { Console.Write(束弍仂弍仍亠仆仂 {0} 亟仂从仄亠仆于." + " 亰舒仍亳亳仍仂 {1}n", step, finish - step); step = lambdaDel(step); } *乂仂 弍亟亠 磻仂 亰舒仄仆亳亳 ++舒 仆舒 舒++ ? 礆弍亟舒 于亳舒亰亳 (仂亟亳仆仂仆)
  • 26. 礆弍亟舒 仂仗亠舒仂亳: (input parameters) => {statements;} delegate int Power ( int change); // 亳亞仆舒舒 亟亠仍亠亞舒舒 Power lambdaDel = change => { if (change != 0) return change * change; return 0; } Console.WriteLine( Power ( 10 ) ); 礆弍亟舒 仂仗亠舒仂亳 (弍仍仂从仂于 于亳舒亰亳)
  • 28. 仂亟 舒于仂仄舒亳仆亠 仂仗仂于亠仆仆 仗仂 亠, 仂 舒仍舒 磻舒 亟. 仂亟 亟ム 仗仂 仆舒仗仆仂仄 仗亳仆亳仗: 仂弍从, 磻亳亶 仗仂磦仍 从舒于 亟仂 仗仂亟, 亠 仂弍仂弍仆亳从 仗仂亟. 仂仍亳 仗仂亟 舒, 于亳从仍亳从舒ム 于 亰舒亠仂于舒仆 仂弍仂弍仆亳从亳 仗仂亟. 弍仂弍仆亳从亳 亰舒亰于亳舒亶 仗亠亟舒于仍亠仆 亟亠仍亠亞舒舒仄亳. 仂亟 (Events)
  • 29. delegate void ClickHandler(); class Button { public ClickHandler Click; void OnMsg(...) { switch(msg) { case WM_LBUTTONDOWN: if (Click != null) Click(); } } }; 亳从仍舒亟 仗仂亟 仆舒 仂仆仂于 亟亠仍亠亞舒舒
  • 30. event 亟亠仍亠亞舒_仗仂亟 仄_仗仂亟; 丶亠 于于亠亟亠仆亠 于 .NET 仗仂仍亠-仗仂亟, 磻 舒于仂仄舒亳仆仂 于于仂亟亳 仗仂仍亠-亟亠仍亠亞舒 亟于舒 亟仂亟舒从仂于亳 仄亠仂亟, 磻 亶仂亞仂 仂弍仍亞仂于ム. 仂亟 (Events)
  • 32. eleks.com 亠仄仂仆舒 6 从亰亠仄仗仍仆亳亶 仄亠仂亟 于 磻仂 仂弍仂弍仆亳从舒
  • 33. public event EventHandler<MyEventArgs> SomeEvent; 弌亠亠亟仂于亳亠 .NET 仆舒亟舒 于弍亟仂于舒仆亳亶 亰舒亞舒仍仆亠仆亳亶 亟亠仍亠亞舒 EventHandler. 亠从仂仄亠仆亟 于亳从仂亳仂于于舒亳 舒仄亠 舒从亳亶 仗仂弍, 舒 仆亠 于亳亰仆舒舒亳 于仍舒仆亳亶 亟亠仍亠亞舒. EventHandler<TEventArgs>
  • 34. public delegate void EventHandler( object sender, // 仂亳仍舒仆仆 仆舒 仂弍从, 仂 于亳从仍亳从舒于 仗仂亟 EventArgs e // 舒舒仄亠亳, 磻 仂仗亳ム 仗仂亟 ); EventArgs 仆亠 仄亳 亢仂亟仆仂亞仂 仗仂仍, 磻亠 弍 仗亠亠亟舒于舒仍仂 从仂亳仆 仆仂仄舒. 乂仂弍 仗亠亠亟舒亳 亟仂亟舒从仂于 仆仂仄舒 亠亠亰 EventArgs, 于于仂亟亳 仆仂于亳亶 从仍舒, 亟仂仆亳亶 亟仍 仆仂亞仂. 弌舒仆亟舒仆亳亶 亟亠仍亠亞舒
  • 35. eleks.com 亠仄仂仆舒 7 弌从仍舒亟仆亳亶 仗亳从仍舒亟 仂弍仂弍仆亳从舒 仗仂亟亶
  • 36. 仂亰于仂仍ム 亟仂亟舒于舒亳 仆仂于 仄亠仂亟亳 于 于亢亠 仆ム 亳仗亳, 弍亠亰 于仂亠仆仆 于仍舒仆仂亞仂 从仍舒舒. 亠仂亟 仂亰亳亠仆仆 仄舒 亟仂仗 仍从亳 亟仂 仗弍仍仆亳 仍亠仆于 从仍舒. 亊从仂 于弍亟仂于舒仆亳亶 仄亠仂亟 仂亰亳亠仆仆, 仗仂亳亠 仆舒亟舒 于弍亟仂于舒仆仂仄 仄亠仂亟 亠仂亟亳 仂亰亳亠仆仆 亳仂从仂 于亳从仂亳仂于ム 于 LINQ. Extension methods
  • 37. Example public static class StringExtension { public static int WordCount(this string str, char c) { int counter = 0; for (int i = 0; i<str.Length; i++) { if (str[i] == c) counter++; } return counter; } } int i = s.WordCount(c);
  • 39. LINQ (Language-Integrated Query) 仄仂于舒 仆亠亞仂于舒仆亳 亰舒仗亳于, 亟仂亰于仂仍 于亳亟仂弍于舒亳 仆仂仄舒 亰 亰仆亳 亟亢亠亠仍 亟舒仆亳. 舒ム 亰 XML, SQL, ADO.NET, .NET Collections. 仂弍亳 亰舒仗亳* 舒亳仆仂 仄仂于亳 仗仂亞舒仄于舒仆仆. 仂仄仗仂仆亠仆 .NET Framework 3.5 *舒仗亳 于亳舒亰, 磻亳亶 亟舒 亟舒仆 亰 亟亢亠亠仍舒 亟舒仆亳. LINQ
  • 40. OthersC# VB.NET .NET Language Integrated Query (LINQ) LINQ to SQL LINQ to Objects LINQ to XML LINQ to Datasets LINQ to Entities LINQ data source providers ADO.NET support for LINQ
  • 41. 舒亶仗仂亠 于亳亰仆舒亠仆仆 亰舒仗亳舒 LINQ from 亰仄仆仆舒 in 仆舒弍-仂弍从于 select 亰仄仆仆舒; 舒仗亳亳 LINQ
  • 42. 弍从亳 于亳从仂亳仂于ム 亳从仍亳 仄仂于亳 foreach(Customer c in customers) if (c.Region == "UK") ... 舒亰亳 亟舒仆亳 于亳从仂亳仂于ム SQL SELECT * FROM Customers WHERE Region='UK' XML 于亳从仂亳仂于 XPath/XQuery //Customers/Customer[@Region='UK'] 舒仗亳亳 弍亠亰 LINQ
  • 43. 舒仗亳亳 亰 LINQ var myCustomers = from c in customers where c.Region == "UK" select c; var goodCusts = (from c in db.Customers where c.PostCode.StartsWith("GY") orderby c.Sales descending select c).Skip(10).Take(10);
  • 44. 仗亠舒仂亳 LINQ 丐亳仗 仂仗亠舒仂舒 亰舒仗亳 仗亠舒仂亳 亰舒仗亳 弍仄亠亢亠仆仆 Where, OfType 仂亠从 Select, SelectMany 弍亟仆舒仆仆 Join, GroupJoin 仂仆从舒亳仆舒 Concat 弌仂于舒仆仆 OrderBy, OrderByDescending, ThenBy, ThenByDescending, Reverse 丕舒仆仂于从舒 Distinct, Except, Intersect, Union 仗于舒仆仆 GroupBy 亠亠于仂亠仆仆 AsEnumerable, Cast, OfType, ToArray, ToDictionary, ToList, ToLookup 仂于仆礌仆 SequenceEqual 亳弍 亠仍亠仄亠仆舒 DefaultIfEmpty, ElementAt, ElementAtOrDefault, First, FirstOrDefault, Last, LastOrDefault, Single, SingleOrDefault 丕于仂亠仆仆 Empty, Range, Repeat 仍从仆亠 于亳亰仆舒亠仆仆 All, Any, Contains 亞亠亞舒 Aggregate, Average, Count, LongCount, Max, Min, Sum 舒亰仄亠从舒 Skip, SkipWhile, Take, Takewhile
  • 45. 仄 舒仆亟舒仆仂亞仂 亳仆舒从亳 from .. in .. select 亟仍 于仂亠仆仆 亰舒仗亳 LINQ 仄亳 仄仂亢亠仄仂 亰舒仂仂于于舒亳 仗亠舒仍仆 仄亠仂亟亳 仂亰亳亠仆仆, 磻 于亳亰仆舒亠仆 于 仆亠亠亶 IEnumerable. 亠 从仂亢亠仆 仄亠仂亟 仂亰亳亠仆仆 仄舒 舒仆舒仍仂亞 亠亠亟 仂仗亠舒仂于 LINQ, 于 仂仄 于亳仗舒亟从 仄仂亢仆舒 亰舒仂仂于于舒亳 仂弍亳亟于舒 仗亟仂亟亳. string[] teams = { "舒于舒", "仂", "亠舒仍 舒亟亳亟", "舒仆亠亠 弌", "舒亠仍仂仆舒" }; int number = (from t in teams where t.ToUpper().StartsWith("") select t).Count(); 亠仂亟亳 仂亰亳亠仆仆 LINQ
  • 46. var contacts = from c in customers where c.City == "Hove" select new { c.Name, c.Phone }; var contacts = customers .Where(c => c.City == "Hove") .Select(c => new { c.Name, c.Phone }); Extension methods Lambda expressions Query expressions Object initializersAnonymous types Local variable type inference
  • 48. 息 Denys Prylutskyi, 2015 舒从亳仆亠 亰舒于亟舒仆仆
  • 49. 亠从仂仄亠仆亟仂于舒仆舒 仍亠舒舒 1. R. Sedgewick Algorithms 2. A. Troelsen C# 6.0 and the .NET 4.6 Framework 3. H. Schildt C# 4.0 The Complete Reference 4. J. Richter CLR via C# 5. J. Skeet C# in Depth 6. Stackoverflow.com