【澳门葡京备用网址】基本语法,0四大新风味代码示例与解读

摘要:今日大家结合代码实例来具体看一下C#四.0中的多少个比较根本的性状。

摘要:前日大家构成代码实例来具体看一下C#四.0中的多个比较关键的性状。

11年 C#澳门葡京备用网址, 四.0四大新特色代码示例与解读,

摘要:后天大家结合代码实例来具体看一下C#四.0中的八个比较根本的特征。

  在此之前的小说中,大家曾介绍过C#的野史及C# 4.0新增天性,包罗:dynamic、
命名和可选参数、动态导入以及协变和逆变等。今日我们结合代码实例来具体看一下C#4.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#向动态语言过渡的1种试探吧。

  二.泛型自动转换

  在C# 4.0事先下边的代码是不可以编写翻译通过的

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

  在C#
四.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个是必选参数,第一个和第多少个是可选参数,他们都有二个暗中认可值。

  那种样式对一定参数的几个章程重载很有用。如下调用:

   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();
  }

  很举世瞩目标那是2个语法糖,可是在点子参数很多的状态下很有意义,能够追加代码的可读性。

C# 四.0第四次全国代表大会新特色代码示例与解读,
摘要:今日我们构成代码实例来具体看一下C#肆.0中的多少个比较关键的特征。
从前的作品中,我们曾介…

  一、.net四.0第二新特征

  此前的稿子中,大家曾介绍过C#的历史及C# 四.0新增天性,包蕴:dynamic、
命名和可选参数、动态导入以及协变和逆变等。前天大家结合代码实例来具体看一下C#四.0中的多少个比较关键的脾性。

  在此以前的稿子中,大家曾介绍过C#的历史及C# 四.0新增特性,包罗:dynamic、
命名和可选参数、动态导入以及协变和逆变等。后天大家结合代码实例来具体看一下C#四.0中的八个比较重大的特征。


  【澳门葡京备用网址】基本语法,0四大新风味代码示例与解读。1.dynamic ExpandoObject

  1.dynamic ExpandoObject

       
.Net4.0在.Net三.5基础上增加产量的基本点特点有:可选参数、命名参数和Dynamic。具体请阅乌里黑片的这篇博文。那里我们重点讲解C#四.0的Dynamic本性,对于其它特色大家能够在VS20十内尝试一下。总之.Net在不断提升级中学。

  熟练js的心上人都知情js能够这么写 :

  纯熟js的情人都明白js能够这么写 :

 

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

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

     贰、ExpandoObject普通应用  

  今后以此js动态语言的天性,我们也能够在c#中动用了,前提是将1个变量申明为ExpandoObject类型。如下例:

  今后这些js动态语言的天性,大家也得以在c#中央银行使了,前提是将2个变量注脚为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运营时动态生成属性或然措施。但起码比.NET3.5Red Banner了。

  }

  }

 

  C#
四.0中新增了二个命名空间System.Dynamic来兑现对此选择的匡助,那种用法的含义何在,今后自笔者还不太精通,也是C#向动态语言过渡的1种试探吧。

  C#
四.0中新增了1个命名空间System.Dynamic来完毕对此选拔的辅助,那种用法的含义何在,以后笔者还不太精晓,也是C#向动态语言过渡的一种试探吧。

    三、Dynamic 动态类型对DuckType
的支撑

  二.泛型自动转换

  2.泛型自动转换


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

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

     
一.最近在园子里面看见了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#
4.0中那种申明是允许的,可是也仅限于泛型接口,泛型类型的接近做法是不容许的,如下代码是有编译错误的

  在C#
四.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内就能够看见该类的成员列表,截图如下:

澳门葡京备用网址 1

 

所属方法都以虚方法,我们得以重写这几个虚方法。那里最首要看TryInvokeMember()方法。那几个主意VS20十交付了详细的叙述。

基于VS20拾诠释,由于本人的VS20十是英文版的,那里就不贴出英文表明了。简单介绍一下怎么着使用这些主意:假使我们多少个类OurClass它一连了DynamicObject
这么些Class。OurClass中有1个方法OurMethod()。接着在OurClass 类中 重写
TryInvokeMember那几个基类虚方法。以上设置完后从此只要OurClass
的OurMethod方法1旦被调用都先实行一下重写后的

   TryInvokeMember()方法。可能你会问那样到底有何用途?OK!请先看javascript这段代码片段:

 

 

1 function
tryInvokeMember(obj) {
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
类(鸭子)
方法(鸭子叫)执行在此之前,大家要看清目的的类是或不是是具备鸭子叫的效率?要是不有所就不应该推行,不然程序势必会抛出13分。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;
}
}

 

     二、建立多个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
}

 

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

1 public static string
DoQuack(dynamic animal)
2 {

  这几个艺术有多少个参数第三个是必选参数,第1个和第四个是可选参数,他们都有3个私下认可值。

  那些点子有四个参数第3个是必选参数,第三个和第一个是可选参数,他们都有三个暗中认可值。

3 string result

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

  
四、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
}

 

程序执行结果如下:

澳门葡京备用网址 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(一,”arg”)时会优先实施未有可选参数的办法。

  实验注明调用DoSomething(1,”arg”)时会优先实施未有可选参数的章程。

  4.情势参数之命名参数

  四.办法参数之命名参数

  命名参数让我们得以在调用方法时钦赐参数名字来给参数赋值,那种境况下能够忽略参数的相继。如下方法注明:

  命名参数让我们得以在调用方法时内定参数名字来给参数赋值,那种景况下能够忽略参数的次第。如下方法注明:

  
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个语法糖,可是在格局参数很多的动静下很有含义,能够追加代码的可读性。

  很分明的那是3个语法糖,可是在形式参数很多的景况下很有意义,能够扩张代码的可读性。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website