程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c# 4.0新特性一覽(2)

c# 4.0新特性一覽(2)

編輯:關於C語言

使用dynamic的好處在於,可以不去關心對象是來源於COM, IronPython, Html DOM或者反射,只要知 道有什麼方法可以調用就可以了,剩下的工作可以留給runtime。下面是調用IronPython類的例子:

ScriptRuntime py = Python.CreateRuntime();
dynamic helloworld = py.UseFile("helloworld.py");
Console.WriteLine("helloworld.py loaded!");

dynamic也可以用在變量的傳遞中,runtime會自動選擇一個最匹配的overload方法。

這裡有一個demo:把一段Javascript代碼拷到C#文件中,將var改成dynamic,function改成void,再 改一下構造函數的調用方式(new type()改為win.New.type()),去掉Javascript中的win.前綴(因為這 已經是C#的方法了),就可以直接運行了。

dynamic的實現是基於IDynamicObject接口和DynamicObject抽象類。而動態方法、屬性的調用都被轉 為了GetMember、Invoke等方法的調用。

public abstract class DynamicObject : IDynamicObject
{
public virtual object GetMember(GetMemberBinder info);
public virtual object SetMember(SetMemberBinder info, object value);
public virtual object DeleteMember(DeleteMemberBinder info);   public virtual  object UnaryOperation(UnaryOperationBinder info);
public virtual object BinaryOperation(BinaryOperationBinder info, object arg);
public virtual object Convert(ConvertBinder info);   public virtual object  Invoke(InvokeBinder info, object[] args);
public virtual object InvokeMember(InvokeMemberBinder info, object[] args);
public virtual object CreateInstance(CreateInstanceBinder info, object[] args);    public virtual object GetIndex(GetIndexBinder info, object[] indices);
public virtual object SetIndex(SetIndexBinder info, object[] indices, object  value);
public virtual object DeleteIndex(DeleteIndexBinder info, object[] indices);    public MetaObject IDynamicObject.GetMetaObject();
}

Named and optional parameters

這似乎不是什麼很難實現或很新穎的特性,只要編譯器的支持就可以(VB很早就支持了)。估計加入 的原因是群眾的呼聲太高了。

帶有可選參數方法的聲明:

public StreamReader OpenTextFile(
string path,
Encoding encoding = null,
bool detectEncoding = true,
int bufferSize = 1024);

命名參數必須在最後使用:

OpenTextFile("foo.txt", Encoding.UTF8, bufferSize: 4096);

順序不限:

OpenTextFile(bufferSize: 4096, path: "foo.txt", detectEncoding:  false);

Improved COM InterOperability

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved