威尼斯人线上娱乐

主导语法,0第四次全国代表大会新特色代码示例与解读

21 4月 , 2019  

摘要:明日大家结合代码实例来具体看一下C#四.0中的八个相比根本的特点。

摘要:前日我们结合代码实例来具体看一下C#4.0中的三个比较关键的特征。

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

摘要:今日大家结合代码实例来具体看一下C#四.0中的多个比较重大的特点。

  从前的小说中,大家曾介绍过C#的历史及C# 4.0新扩大个性,包蕴:dynamic、
命名和可选参数、动态导入以及协变和逆变等。今日大家结合代码实例来具体看一下C#四.0中的七个相比关键的特征。

  1.dynamic ExpandoObject

  熟谙js的仇敌都领悟js可以这么写 :

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

  今后以此js动态语言的表征,大家也足以在c#中动用了,前提是将1个变量阐明为ExpandoObject类型。如下例:

    static void Main(string[] args)
主导语法,0第四次全国代表大会新特色代码示例与解读。  {         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#
肆.0中新扩张了四个命名空间System.Dynamic来落到实处对此选拔的支撑,那种用法的意思何在,现在自身还不太清楚,也是C#向动态语言过渡的壹种试探吧。

  2.泛型自动调换

  在C# 四.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);
  }

  这几个法子有几个参数第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(壹,”arg”)时会优施夷光行未有可选参数的办法。

  四.方法参数之命名参数

  命名参数让我们能够在调用方法时钦定参数名字来给参数赋值,这种场馆下得以忽略参数的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 Main(string[] args)
  {
      DoSomething( scroll : “no”,height : 10, width : 5, openerName
: “windowname”);
      Console.ReadLine();
  }

  很显眼的那是2个语法糖,不过在章程参数诸多的情状下很有含义,能够扩大代码的可读性。

C# 4.0四大新风味代码示例与解读,
摘要:今日大家结合代码实例来具体看一下C#肆.0中的多个相比较主要的特色。
在此之前的篇章中,大家曾介…

  1、.net4.0重中之重新特点

  从前的小说中,大家曾介绍过C#的野史及C# 4.0新增加本性,包罗:dynamic、
命名和可选参数、动态导入以及协变和逆变等。前几天大家结合代码实例来具体看一下C#四.0中的多少个相比首要的风味。

  以前的篇章中,大家曾介绍过C#的历史及C# 四.0新增添性格,包涵:dynamic、
命名和可选参数、动态导入以及协变和逆变等。明日大家结合代码实例来具体看一下C#四.0中的多少个相比较重大的特色。


  1.dynamic ExpandoObject

  1.dynamic ExpandoObject

       
.Net4.0在.Net三.伍基础上增加产量的机要特色有:可选参数、命名参数和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;

     2、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,那里1度捌玖不离10javascript 的var obj ={}; obj.Name
=’lucy’。但又不完全同样,因为无法在clr运维时动态生成属性大概措施。但至少比.NET三.5不甘后人了。

  }

  }

 

  C#
4.0中新扩张了2个命名空间System.Dynamic来兑现对此选拔的支撑,那种用法的意义何在,今后本人还不太了解,也是C#向动态语言过渡的一种试探吧。

  C#
四.0中新添了2个命名空间System.Dynamic来达成对此选拔的支撑,那种用法的意义何在,以后本人还不老聃楚,也是C#向动态语言过渡的1种试探吧。

    叁、Dynamic 动态类型对DuckType
的协理

  二.泛型自动转变

  二.泛型自动调换


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

  在C# 4.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还有3个重大的.Net4.0特点有需要提及到,那也是本文器重议论的内容。

它便是:“DynamicObject”
该类位于System.Dynamic
命名空间下。在VS20十内就足以望见该类的积极分子列表,截图如下:

威尼斯人线上娱乐 1

 

所属方法都是虚方法,我们能够重写这么些虚方法。那里根本看TryInvokeMember()方法。这几个法子VS二零一零付出了详实的讲述。

听大人说VS20十注脚,由于本身的VS2010是英文版的,那里就不贴出英文评释了。简要介绍一下哪些利用这些办法:假若我们一个类OurClass它一而再了DynamicObject
那个Class。OurClass中有三个方法OurMethod()。接着在OurClass 类中 重写
TryInvokeMember这几个基类虚方法。以上设置完后之后固然OurClass
的OurMethod方法一旦被调用都先举办一下重写后的

   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#4.0中的DynamicObject了吗?真正的目标就是:在DuckType
类(鸭子)
方法(鸭子叫)实施此前,大家要剖断目的的类是还是不是是具备鸭子叫的成效?假如不富有就不应有实践,不然程序势必会抛出万分。C#中怎么样达成吗?步骤如下:

      1、建立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 {

  那些点子有八个参数第一个是必选参数,第三个和第5个是可选参数,他们都有三个暗许值。

  这么些方法有多个参数第一个是必选参数,第一个和第四个是可选参数,他们都有二个暗许值。

3 string result

animal.Quack();
4 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();
  }

  可能你会想到,倘诺自身有2个和可选参数方法有些参数同样的法子具名的法卯时,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这几个点子有八个参数,可是并未有可选参数,

  那里又重载了二个DoSomething这一个艺术有几个参数,可是并未有可选参数,

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

  实验验证调用DoSomething(一,”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 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();
  }

  很扎眼的那是一个语法糖,可是在章程参数多数的情状下很有含义,可以扩张代码的可读性。

  很显然的那是1个语法糖,可是在章程参数许多的景观下很有含义,能够追加代码的可读性。


相关文章

发表评论

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

网站地图xml地图