文章目录
自己没有做过什么大项目只能去读别人的代码,不读不知道一读吓一跳。差距蹭蹭地拉开。自己属于比较毛躁的人,看什么也看不进去。整天混天度日,在公司里上QQ混校内。偶尔发现自己也老大不小了。又在大家对程序员前途的描述下决定痛改前非好好学习。
回家戴上耳机听先听首歌鼓励一下自己,我听得是火影忍者的 萤之光 对照着翻译仔细听一下很有感觉(我很仇日,不过他们确实很励志,师夷长技以制夷)。翻开刚买的书想"翻到哪页看那页",俺地娘来Linq。开始吧不牢骚了。
NO1对象初始值设定项
什么东东啊?不管了,照着例子写代码。
第一段代码:
1 class Person
2 {
3 public string name { get; set; }
4 public string age { get; set; }
5 public string sex { get; set; }
6 }
2 {
3 public string name { get; set; }
4 public string age { get; set; }
5 public string sex { get; set; }
6 }
首先定义了一个类:Person,也就是人类啦。人类就有个名字了,你年龄了,性别了(没有这三项的人类不在托管堆受控)
这三个应该叫:Person的属性。就是人类的特征性质了。
然后再看下面的代码
代码
1 static void Main(string[] args)
2 {
3 Person pers=new Person
4 {
5 name = "Lee",
6 age = "22",
7 sex = "boy",
8 };
9 }
2 {
3 Person pers=new Person
4 {
5 name = "Lee",
6 age = "22",
7 sex = "boy",
8 };
9 }
咦,整啥呢这是?记得以前实例化一个对象应该是
class Program
{
static void Main(string[] args)
{
Person pers = new Person();
pers.name = "Lee";
pers.age = "22";
pers.sex = "boy";
}
}
class Program
{
static void Main(string[] args)
{
Person pers = new Person();
pers.name = "Lee";
pers.age = "22";
pers.sex = "boy";
}
}
{
static void Main(string[] args)
{
Person pers = new Person();
pers.name = "Lee";
pers.age = "22";
pers.sex = "boy";
}
}
靠,潜水这么多论坛怎么也会反编译吧,尽管看不懂IL。。。。、
IL:
代码
1
2 .method private hidebysig static void Main(string[] args) cil managed
3 {
4 .entrypoint
5 .maxstack 2
6 .locals init (
7 [0] class lamda.Person <>g__initLocal0)
8 L_0000: newobj instance void lamda.Person::.ctor()
9 L_0005: stloc.0
10 L_0006: ldloc.0
11 L_0007: ldstr "Lee"
12 L_000c: callvirt instance void lamda.Person::set_name(string)
13 L_0011: ldloc.0
14 L_0012: ldstr "22"
15 L_0017: callvirt instance void lamda.Person::set_age(string)
16 L_001c: ldloc.0
17 L_001d: ldstr "boy"
18 L_0022: callvirt instance void lamda.Person::set_sex(string)
19 L_0027: ret
20 }
2 .method private hidebysig static void Main(string[] args) cil managed
3 {
4 .entrypoint
5 .maxstack 2
6 .locals init (
7 [0] class lamda.Person <>g__initLocal0)
8 L_0000: newobj instance void lamda.Person::.ctor()
9 L_0005: stloc.0
10 L_0006: ldloc.0
11 L_0007: ldstr "Lee"
12 L_000c: callvirt instance void lamda.Person::set_name(string)
13 L_0011: ldloc.0
14 L_0012: ldstr "22"
15 L_0017: callvirt instance void lamda.Person::set_age(string)
16 L_001c: ldloc.0
17 L_001d: ldstr "boy"
18 L_0022: callvirt instance void lamda.Person::set_sex(string)
19 L_0027: ret
20 }
IL代码都一样啊,就是换了个写法啊原来。突然想起我高中化学老师的话:记住就行,遇到了就这么做。哦知道了。
NO2匿名方法
看到这想起李建中老师的视频讲座(抓紧翻出来回顾一下)。
先看一段比较熟悉的委托,记得余晖说过也叫代理吧(委托与事件)。
代码
1 namespace lamda
2 {
3 class Program
4 {
5 delegate string mydelegate(string name);
6 static void Main(string[] args)
7 {
8 mydelegate del = Person.PersonEat;
9 Console.WriteLine(del("apple"));
10 Console.ReadLine();
11 }
12 }
13 public class Person
14 {
15 public static string PersonEat(string food)
16 {
17 return "I eat " + food;
18 }
19 }
20
21 }
2 {
3 class Program
4 {
5 delegate string mydelegate(string name);
6 static void Main(string[] args)
7 {
8 mydelegate del = Person.PersonEat;
9 Console.WriteLine(del("apple"));
10 Console.ReadLine();
11 }
12 }
13 public class Person
14 {
15 public static string PersonEat(string food)
16 {
17 return "I eat " + food;
18 }
19 }
20
21 }
如果突然间看到下面这段代码估计觉得这是java吗?c#没见这么写啊。
代码
1 class Program
2 {
3 delegate string mydelegate(string name);
4 static void Main(string[] args)
5 {
6 mydelegate del = (string food) => { return "I eat " + food; };
7 Console.WriteLine(del("apple"));
8 Console.ReadLine();
9 }
10 }
2 {
3 delegate string mydelegate(string name);
4 static void Main(string[] args)
5 {
6 mydelegate del = (string food) => { return "I eat " + food; };
7 Console.WriteLine(del("apple"));
8 Console.ReadLine();
9 }
10 }
本想故技重施看IL,木然发现看不懂了。丢人ing。发现结果一样只不过省了个方法写在一行上了。
string food就是原先那个委托所代理的方法中的参数列表。右侧呢直接就是方法里的代码块。方法的名字没有了省略了。匿名了,,,
发现自己现在也就是能把一个lambda表达式还原回代理方法这么一个简单的阶段,也许还没有。
代码
1 .method private hidebysig static void Main(string[] args) cil managed
2 {
3 .entrypoint
4 .maxstack 3
5 .locals init (
6 [0] class lamda.Program/mydelegate del)
7 L_0000: ldsfld class lamda.Program/mydelegate lamda.Program::CS$<>9__CachedAnonymousMethodDelegate1
8 L_0005: brtrue.s L_0018
9 L_0007: ldnull
10 L_0008: ldftn string lamda.Program::<Main>b__0(string)
11
12 L_000e: newobj instance void lamda.Program/mydelegate::.ctor(object, native int)
13
14 L_0013: stsfld class lamda.Program/mydelegate lamda.Program::CS$<>9__CachedAnonymousMethodDelegate1
15 L_0018: ldsfld class lamda.Program/mydelegate lamda.Program::CS$<>9__CachedAnonymousMethodDelegate1
16
17 L_001d: stloc.0
18 L_001e: ldloc.0
19 L_001f: ldstr "apple"
20 L_0024: callvirt instance string lamda.Program/mydelegate::Invoke(string)
21 L_0029: call void [mscorlib]System.Console::WriteLine(string)
22 L_002e: call string [mscorlib]System.Console::ReadLine()
23 L_0033: pop
24 L_0034: ret
25 }
2 {
3 .entrypoint
4 .maxstack 3
5 .locals init (
6 [0] class lamda.Program/mydelegate del)
7 L_0000: ldsfld class lamda.Program/mydelegate lamda.Program::CS$<>9__CachedAnonymousMethodDelegate1
8 L_0005: brtrue.s L_0018
9 L_0007: ldnull
10 L_0008: ldftn string lamda.Program::<Main>b__0(string)
11
12 L_000e: newobj instance void lamda.Program/mydelegate::.ctor(object, native int)
13
14 L_0013: stsfld class lamda.Program/mydelegate lamda.Program::CS$<>9__CachedAnonymousMethodDelegate1
15 L_0018: ldsfld class lamda.Program/mydelegate lamda.Program::CS$<>9__CachedAnonymousMethodDelegate1
16
17 L_001d: stloc.0
18 L_001e: ldloc.0
19 L_001f: ldstr "apple"
20 L_0024: callvirt instance string lamda.Program/mydelegate::Invoke(string)
21 L_0029: call void [mscorlib]System.Console::WriteLine(string)
22 L_002e: call string [mscorlib]System.Console::ReadLine()
23 L_0033: pop
24 L_0034: ret
25 }
哎,写不下去了,自己水平差太多。只是自己理解皮毛。加倍努力。