C Sharp

出自 ProgWiki
前往: 導覽搜尋

C#,參照:『維基百科~C#

版本

版本 語言規格 日期 .NET Framework版本 Visual Studio版本
ECMA ISO/IEC Microsoft
C# 1.0 2002年12月 2003年四月 2002年1月 2002年1月 .NET Framework 1.0 Visual Studio .NET 2002
C# 1.2 2003年10月 2003年4月 .NET Framework 1.1 Visual Studio .NET 2003
C# 2.0 2006年6月 2006年9月 2005年9月 2005年11月 .NET Framework 2.0 Visual Studio 2005
C# 3.0 2007年8月 2006年11月 .NET Framework 3.5 Visual Studio 2008
C# 4.0 2010年4月 .NET Framework 4 Visual Studio 2010
C# 5.0 2013年6月 2012年8月 .NET Framework 4.5 Visual Studio 2012/2013
C# 6.0 2015年7月 .NET Framework 4.6 Visual Studio 2015
C# 7.0 2017年3月 .NET Framework 4.6.2 Visual Studio 2017

技術文件

C# Language Specification
  • C# 1.2
C:\Program Files\Microsoft Visual Studio 8\VC#\Specifications\1028\C# Language Specification 1.2.doc
  • C# 2.0
C:\Program Files\Microsoft Visual Studio 8\VC#\Specifications\1028\C# Language Specification 2.0.doc
  • C# 3.0
C:\Program Files\Microsoft Visual Studio 9.0\VC#\Specifications\1028\CSharp Language Specification.doc
  • C# 4.0
C:\Program Files\Microsoft Visual Studio 10.0\VC#\Specifications\1028\CSharp Language Specification.doc
  • C# 5.0
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC#\Specifications\1028\CSharp Language Specification.docx
或
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC#\Specifications\1028\CSharp Language Specification.docx
其它

相關工具


應用

主條目:.NET Library

討論區

跨語言整合

JavaScript

FAQ

C#之謎(數字後的m)

  • 2 / 1000 等於 0 (輸出成Int32,因為變成整數除整數?)
  • 2 / 1000m 等於 0.002 (輸出成Decimal)

自訂控制項的DataBinding

GC(記憶體回收)

System.GC.Collect();

使用VB.Net的物件或函數在C#

  • 在C#之中使用VB.Net的 Left()、Mid()、Right()……等字串函數。
    1. 專案設定中,把 Microsoft.VisualBasic 加入參考。
    2. using Microsoft.VisualBasic;
    3. 把 Left() 改成 Strings.Left() 來用。
    4. 需注意在C#中,字串的字元索引是從0開始算的,而VB.NET是從1開始算的。
  • 在C#之中使用VB.Net的 My 的命名空間。
Using the VB.net My namespace in C# .net 2.0

Lambda 運算式

主條目:Lambda#應用

WebBrowser

需要先 using System.Net; 才能用
只對超連結有效,對於使用JavaScript去做window.open的無效

關於enum

判斷字串是否為enum裡定義過的
字串轉enum
//版本1
private bool TryParseEnum<T>(string valueToParse, out T returnValue)
{
    if (Enum.IsDefined(typeof(T), valueToParse))
    {
        returnValue = (T)Enum.Parse(typeof(T), valueToParse);
        return true;
    }
    returnValue = default(T);
    return false;
}
 
//版本2 (需要 using System.ComponentModel; )
private bool TryParseEnum<T>(string valueToParse, out T returnValue)
{
    if (Enum.IsDefined(typeof(T), valueToParse))
    {
        TypeConverter converter = TypeDescriptor.GetConverter(typeof(T));
        returnValue = (T)converter.ConvertFromString(valueToParse);
        return true;
     }
 
    returnValue = default(T);
    return false;
}

執行外部執行檔

遠端檔案下載

  • 透過 System.Net.WebClient 從遠端的 Web-Server 下載檔案。
using System.Net;
 
Uri UriSrc = new Uri(strSrcUrl);
 
// Create a new WebClient instance.
using (WebClient objWebClient = new WebClient())
{
	if (IsAsync == true)
		objWebClient.DownloadFileAsync(UriSrc, strFilename);
	else
		objWebClient.DownloadFile(UriSrc, strFilename);
}

取得目前執行檔的檔名與路徑

using System;
using System.Diagnostics;
 
[DllImport("user32.dll")]
private static extern IntPtr GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId);
 
private string GetCurrentProcessFileName()
{
    return Process.GetCurrentProcess().MainModule.FileName;
}
 
 
private string GetWindowModuleFileName(IntPtr hwnd)
{
   uint pid = 0;
   GetWindowThreadProcessId(hwnd, out pid);
   return Process.GetProcessById((int)pid).MainModule.FileName;
}

其他