摘要:后日大家构成代码实例来具体看一下C#四.0中的多少个相比重要的特点。

摘要:今日大家构成代码实例来具体看一下C#四.0中的两个相比较重大的特征。

11年 C# 四.0四大新特色代码示例与解读,

摘要:后天大家结合代码实例来具体看一下C#肆.0中的八个比较首要的性情。

  此前的小说中,咱们曾介绍过C#的野史及C# 四.0新扩大天性,包罗:dynamic、
命名和可选参数、动态导入以及协变和逆变等。今日大家结合代码实例来具体看一下C#肆.0中的三个比较关键的特点。

  1.dynamic ExpandoObject

  熟识js的意中人都清楚js能够如此写 :

var t = new Object(); t.Abc = ‘something’; t.Value =243;

  现在以此js动态语言的特征,大家也足以在c#中运用了,前提是将三个变量注解为ExpandoObject类型。如下例:

    static void Main(string[] args)
  {         dynamic t = new ExpandoObject();         t.Abc =”abc”;
        t.Value =10000;
        Console.WriteLine(“t’s abc = {0},t’s value = {1}”, t.Abc,
t.Value);         Console.ReadLine();

  }

  C#
4.0中新扩张了贰个命名空间System.Dynamic来贯彻对此选择的支持,那种用法的含义何在,未来作者还不太通晓,也是C#向动态语言过渡的一种试探吧。

  二.泛型自动调换

  在C# 4.0事先上边包车型客车代码是不得以编写翻译通过的

   IEnumerable<object> objs = new List<string> { “I’m
0″,”I’am 1″,”I’am 2” };

  在C#
4.0中那种评释是允许的,但是也只限于泛型接口,泛型类型的好像做法是差异意的,如下代码是有编写翻译错误的

   List<object> objList = new List<string> { “I’am 0″,”I’am
1″,”I’am 2” };

  3.方法参数之可选参数

  如下方法表明的语法

   static void DoSomething(int notOptionalArg, string arg1 =”default
Arg1″, string arg2 =”default arg2″)
  {
      Console.WriteLine(“arg1 = {0},arg2 = {1}”,arg1,arg2);
  }

  那么些办法有八个参数第二个是必选参数,第2个和第7个是可选参数,他们都有3个私下认可值。

  那种方式对确定地点参数的多少个法子重载很有用。如下调用:

   static void Main(string[] args)
  {
        DoSomething(1);
        DoSomething(1, “葫芦”);
        DoSomething(1, “葫芦”, “黄瓜”);
        Console.ReadLine();
  }

  可能你会想到,假使作者有三个和可选参数方法某些参数一样的方式签名的方法时,C#会怎么管理啊,大家看下下边包车型大巴代码

   static void DoSomething(int notOpArg, string arg)
  {
        Console.WriteLine(“arg1 = {0}”, arg);
    }

  那里又重载了三个DoSomething那些主意有两个参数,但是未有可选参数,

  实验注脚调用DoSomething(1,”arg”)时会优西子行未有可选参数的法子。

  四.主意参数之命名参数

  命名参数让大家能够在调用方法时钦定参数名字来给参数赋值,那种景况下得以忽略参数的顺序。如下方法证明:

  
static void DoSomething(int height, int width, string openerName, string scroll)
  {
        Console.WriteLine(“height = {0},width = {1},openerName = {2},
scroll = {3}”,height,width,openerName,scroll);
  }

  大家得以那样来调用下面注明的点子

   static void Main(string[] args)
  {
      DoSomething( scroll : “no”,height : 10, width : 5, openerName
: “windowname”);
      Console.ReadLine();
  }

  很扎眼的那是三个语法糖,可是在方式参数大多的图景下很有含义,能够扩充代码的可读性。

C# 四.0四大新特点代码示例与解读,
摘要:明日大家构成代码实例来具体看一下C#四.0中的多少个比较首要的性格。
此前的篇章中,我们曾介…

  1、.net四.0重中之重新特点

  以前的小说中,我们曾介绍过C#的历史及C# 四.0新扩展个性,包含:dynamic、
命名和可选参数、动态导入以及协变和逆变等。今天大家结合代码实例来具体看一下C#四.0中的七个比较根本的性状。

  以前的小说中,我们曾介绍过C#的历史及C# ④.0新添个性,包涵:dynamic、
命名和可选参数、动态导入以及协变和逆变等。后天我们构成代码实例来具体看一下C#四.0中的多少个比较重大的性状。


  1.dynamic ExpandoObject

  1.dynamic ExpandoObject

       
.Net四.0在.Net三.五基础上增加产量的关键特点有:可选参数、命名参数和Dynamic。具体请阅生鱼片的那篇博文。那里大家珍视讲授C#四.0的Dynamic性情,对于其余特色大家能够在VS20拾内尝试一下。总来说之.Net在不断进步级中学。

  熟练js的爱人都掌握js能够如此写 :

  熟习js的恋人都驾驭js可以那样写 :

0四大新特点代码示例与解读,基本语法。 

var t = new Object(); t.Abc = ‘something’; t.Value =243;

var t = new Object(); t.Abc = ‘something’; t.Value =243;

     贰、ExpandoObject普通应用  

  以往以此js动态语言的表征,大家也足以在c#中选用了,前提是将三个变量注脚为ExpandoObject类型。如下例:

  以往那么些js动态语言的表征,大家也能够在c#中利用了,前提是将二个变量注脚为ExpandoObject类型。如下例:


    static void Main(string[] args)
  {

    static void Main(string[] args)
  {

       ExpandoObject 类,“需引用System.Dynamic命名空间” 。请看之下代码:       

        dynamic t = new ExpandoObject();

        dynamic t = new ExpandoObject();

 

        t.Abc =”abc”;

        t.Abc =”abc”;

dynamic
Customer =
new
ExpandoObject();
Customer.Name = “Lucy”;
Customer.Age
= 20;
Customer.Female = true;
Console.WriteLine(Customer.Name + Customer.Age
+
Customer.Female);
Console.ReadKey();
  

        t.Value =10000;
        Console.WriteLine(“t’s abc = {0},t’s value = {1}”, t.Abc,
t.Value);

        t.Value =10000;
        Console.WriteLine(“t’s abc = {0},t’s value = {1}”, t.Abc,
t.Value);

 

        Console.ReadLine();

        Console.ReadLine();

输出<< 露茜20True,那里一度接近javascript 的var obj ={}; obj.Name
=’lucy’。但又不完全同样,因为不可能在clr运行时动态生成属性恐怕措施。但起码比.NET三.5Red Banner了。

  }

  }

 

  C#
4.0中新扩展了贰个命名空间System.Dynamic来落到实处对此选用的支撑,那种用法的意思何在,以往本人还不老聃楚,也是C#向动态语言过渡的一种试探吧。

  C#
四.0中新添了1个命名空间System.Dynamic来兑现对此采纳的支撑,那种用法的意思何在,以后本身还不太驾驭,也是C#向动态语言过渡的壹种试探吧。

    3、Dynamic 动态类型对DuckType
的帮助

  二.泛型自动转换

  2.泛型自动转变


  在C# 肆.0事先上边包车型地铁代码是不可以编写翻译通过的

  在C# 四.0事先下边包车型客车代码是不得以编写翻译通过的

     
1.近期在园子里面看见了thinking的那篇博文,文中有那般壹段代码:

   IEnumerable<object> objs = new List<string> { “I’m
0″,”I’am 1″,”I’am 2” };

   IEnumerable<object> objs = new List<string> { “I’m
0″,”I’am 1″,”I’am 2” };

 

  在C#
四.0中这种申明是允许的,可是也只限于泛型接口,泛型类型的好像做法是不允许的,如下代码是有编写翻译错误的

  在C#
4.0中那种注脚是允许的,然则也只限于泛型接口,泛型类型的接近做法是不允许的,如下代码是有编译错误的

static class Calculator
{
public static T Add<T>(T t1, T t2)
{
dynamic d1 =
t1;
dynamic d2 =
t2;

   List<object> objList = new List<string> { “I’am 0″,”I’am
1″,”I’am 2” };

   List<object> objList = new List<string> { “I’am 0″,”I’am
1″,”I’am 2” };

return
(T)(d1 +
d2);
}
}

  3.方法参数之可选参数

  3.方法参数之可选参数

public static void Main(string[]
args){
int i =
Calculator.Add(1, 2);

  如下方法申明的语法

  如下方法证明的语法

double d

Calculator.Add(1.1, 2.2);

   static void DoSomething(int notOptionalArg, string arg1 =”default
Arg1″, string arg2 =”default arg2″)
  {
      Console.WriteLine(“arg1 = {0},arg2 = {1}”,arg1,arg2);
  }

   static void DoSomething(int notOptionalArg, string arg1 =”default
Arg1″, string arg2 =”default arg2″)
  {
      Console.WriteLine(“arg1 = {0},arg2 = {1}”,arg1,arg2);
  }

string s

Calculator.Add(“abc”, “def”);

Console.WriteLine(i + ” ” + d + ” ” + s);

}

 

输出:

>>3
3.3 abcdef

小编在文中提议了以上C#代码是为了通过动态类型来促成基于duck
typing的泛型参数约束。

为了在C#支撑Duck
Type还有二个主要的.Net四.0性格有需要谈到到,这也是本文珍视批评的剧情。

它便是:“DynamicObject”
该类位于System.Dynamic
命名空间下。在VS2010内就足以看见该类的成员列表,截图如下:

金沙注册送58 1

 

所属方法都是虚方法,大家能够重写这一个虚方法。那里关键看TryInvokeMember()方法。那些方式VS2010付给了详尽的叙述。

基于VS20十注脚,由于小编的VS二零零六是英文版的,那里就不贴出英文表明了。简介一下什么样运用那些办法:假如大家三个类OurClass它一而再了DynamicObject
这一个Class。OurClass中有二个方法OurMethod()。接着在OurClass 类中 重写
TryInvokeMember那几个基类虚方法。以上设置完后之后即使OurClass
的OurMethod方法一旦被调用都先实行一下重写后的

   TryInvokeMember()方法。大概你会问那样到底有什么用途?OK!请先看javascript那段代码片段:

 

 

1 function
tryInvokeMember(obj) {
金沙注册送58 , 2 if (obj && typeof
obj.ourMethod === “function”) {
3 return
obj.ourMethod();
4 }
5
alert(‘未找到!’);
6 return null;
7 }
8
9 var ourObj1 = {};
10
ourObj1.Method = function () {
11
alert(‘111’);
12 };
13
14 var ourObj2 = {};
15
ourObj2.ourMethod = function () {
1六
alert(‘已经找到ourMethod并且实行’);
17 };
18
19
tryInvokeMember(ourObj1);
20
tryInvokeMember(ourObj2);

 

世家读完那段js代码后应当会知道为啥我要主要切磋C#四.0中的DynamicObject了吗?真正的目标就是:在DuckType
类(鸭子)
方法(鸭子叫)推行在此之前,大家要剖断目的的类是不是是具有鸭子叫的机能?假如不具备就不应当执行,不然程序势必会抛出卓殊。C#中如何得以达成吗?步骤如下:

      一、建立DynamicAnimal 类承接DynamicObject类,并且重写TryInvokeMember虚方法:

 

 

public class
DynamicAnimal : DynamicObject
{
public override bool
TryInvokeMember(InvokeMemberBinder binder, object[] args,
out object result)
{
bool success
= base.TryInvokeMember(binder, args, out result);

//如若方式不存在,请将result
那个out参数赋值为null
if (!success)
result =
null;

//如若这些地点重返false 将会掀起那些
return true;
}
}

 

     2、建立八个DuckType类,分别为Duck 和 Human:

 

1 public class Duck :
DynamicAnimal
2 {
3 public string Quack()
4 {
5 return “鸭子嘛,就Quack吧!”;
6 }
7 }
8  public class Human :
DynamicAnimal
9 {
10 public string Talk()
11 {
1二 return “人类是用Talk,而不是Quack”;
13 }
14
}

 

    三、在Console 内 建立DuckType的调用方法:

1 public static string
DoQuack(dynamic animal)
2 {

  这一个艺术有多个参数第三个是必选参数,第四个和第多少个是可选参数,他们都有2个暗中认可值。

  这几个点子有五个参数第一个是必选参数,第1个和第四个是可选参数,他们都有一个暗中认可值。

3 string result

animal.Quack();
四 return result
?? “…人类自然不会鸭叫…”;
5
}

  
4、Console 内
Main方法调用:

 

1 static void Main(string[] args)
2 {
3 var duck
= new Duck();
4 var cow
= new Human();
5
Console.WriteLine(“鸭子是Quack”);
6
Console.WriteLine(DoQuack(duck));
7
Console.WriteLine(“人类是talk”);
8
Console.WriteLine(DoQuack(cow));
9
Console.ReadKey();
10
}

 

程序施行结果如下:

金沙注册送58 2
你是不是对.Net四.0 Dynamic 这一个动态类型有了一个新的认知呢?

 

谈起底希望本篇小说能够给你带来支持,如有不足之处接待提议,谢谢!

作者:RyanDing
出处:

  这种样式对一定参数的多少个措施重载很有用。如下调用:

  那种样式对一定参数的多少个法子重载很有用。如下调用:

   static void Main(string[] args)
  {
        DoSomething(1);
        DoSomething(1, “葫芦”);
        DoSomething(1, “葫芦”, “黄瓜”);
        Console.ReadLine();
  }

   static void Main(string[] args)
  {
        DoSomething(1);
        DoSomething(1, “葫芦”);
        DoSomething(1, “葫芦”, “黄瓜”);
        Console.ReadLine();
  }

  可能你会想到,要是笔者有3个和可选参数方法某些参数一样的诀要具名的秘技时,C#会怎么管理吧,我们看下上面包车型大巴代码

  可能你会想到,借使自个儿有贰个和可选参数方法有些参数一样的办法签字的办法时,C#会怎么管理呢,大家看下下边包车型地铁代码

   static void DoSomething(int notOpArg, string arg)
  {
        Console.WriteLine(“arg1 = {0}”, arg);
    }

   static void DoSomething(int notOpArg, string arg)
  {
        Console.WriteLine(“arg1 = {0}”, arg);
    }

  那里又重载了一个DoSomething那几个法子有七个参数,不过尚未可选参数,

  那里又重载了1个DoSomething这一个措施有三个参数,但是尚未可选参数,

  实验证实调用DoSomething(1,”arg”)时会优先执行没有可选参数的章程。

  实验验证调用DoSomething(一,”arg”)时会优先推行未有可选参数的法子。

  四.方式参数之命名参数

  四.办法参数之命名参数

  命名参数让我们得以在调用方法时内定参数名字来给参数赋值,那种情景下得以忽略参数的1一。如下方法评释:

  命名参数让大家能够在调用方法时钦命参数名字来给参数赋值,那种状态下能够忽略参数的逐1。如下方法申明:

  
static void DoSomething(int height, int width, string openerName, string scroll)
  {
        Console.WriteLine(“height = {0},width = {1},openerName = {2},
scroll = {3}”,height,width,openerName,scroll);
  }

  
static void DoSomething(int height, int width, string openerName, string scroll)
  {
        Console.WriteLine(“height = {0},width = {1},openerName = {2},
scroll = {3}”,height,width,openerName,scroll);
  }

  大家能够那样来调用下面注脚的主意

  咱俩得以那样来调用上边注明的措施

   static void Main(string[] args)
  {
      DoSomething( scroll : “no”,height : 10, width : 5, openerName
: “windowname”);
      Console.ReadLine();
  }

   static void Main(string[] args)
  {
      DoSomething( scroll : “no”,height : 10, width : 5, openerName
: “windowname”);
      Console.ReadLine();
  }

  很明显的这是2个语法糖,不过在点子参数多数的情形下很有含义,能够追加代码的可读性。

  很扎眼的那是多少个语法糖,可是在章程参数繁多的气象下很有含义,可以追加代码的可读性。

相关文章

网站地图xml地图