編譯csharp
A. 什麼是csharp 和visual studio
1、C Sharp
C#讀作C Sharp。C#是微軟公司發布的一種面向對象的、運行於.NET Framework和.NET Core(完全開源,跨平台)之上的高級程序設計語言。
C#是一種安全的、穩定的、簡單的,由C和C++衍生出來的面向對象的編程語言。它在繼承C和C++強大功能的同時去掉了一些它們的復雜特性。
2、visual studio
Microsoft Visual Studio(簡稱VS)是美國微軟公司的開發工具包系列產品。VS是一個基本完整的開發工具集,它包括了整個軟體生命周期中所需要的大部分工具,如UML工具、代碼管控工具、集成開發環境(IDE)等等。
所寫的目標代碼適用於微軟支持的所有平台。
(1)編譯csharp擴展閱讀
c#語言結構
1、類:
一個基本的C#類中包含數據成員、屬性、構造器和方法。屬性可以是靜態或實例成員。在C#中類的聲明與C++和Java很相似。
2、布爾運算:
條件表達式的結果是布爾數據類型,布爾數據類型是這種語言中獨立的一種數據類型,從布爾類型到其他類型沒有直接的轉換過程,布爾常量true和false是C#中的關鍵字。
3、介面:
是其他類型為確保它們支持某些操作而實現的引用類型。介面從不直接創建而且沒有實際的表示形式,其他類型必須轉換為介面類型。
4、編譯:
程序直接編譯成標準的二進制可執行形式.但C#的源程序並不是被編譯成二進制可執行形式,而是一種中間語言(IL),類似於JAVA位元組碼。
5、類型:
C# 中的類型一共分為兩類,一類是值類型(Value Type),一類是引用類型(Reference Type)。
B. C SHARP特點
C#的特點主要包括以下幾點:
動態編程特性:
- C# 4.0引入了dynamic關鍵字,允許將靜態對象轉化為動態對象,提供了類似JavaScript、Python等動態語言的靈活性。
高效的編譯策略:
- 使用MSIL編譯,雖然MSIL不是解釋執行,但最終會被編譯成機器碼,性能表現可能與Java相當。
清晰的代碼組織:
- 支持在類外部聲明介面、枚舉和結構體,通過using關鍵字引用其他命名空間的內容,使代碼結構更加清晰易懂。
豐富的數據類型:
- 提供包括bool、byte等基礎類型,以及專為貨幣數據設計的decimal類型,具有高精度,能存儲28位的十進制數字。
面向對象的特性:
- 所有類繼承自基礎的object類,string類型作為語言的一部分,常用於文本處理。C#方法支持可變參數,允許通過ref和out關鍵字進行引用傳遞。
與COM的集成:
- C#與COM的集成是其顯著特點,使C#程序能夠無縫地與Win32組件交互,為編寫COM客戶端或伺服器提供了極大便利。
索引和屬性:
- 通過方括弧中的數字匿名引用類成員,提供了類似數組操作的便捷性。同時,代理和反饋機制允許創建智能方法指針,用於方法的安全調用和事件處理。
C#作為微軟為.NET Framework量身訂做的面向對象編程語言,結合了C/C++的強大功能和Visual Basic的簡易使用特性,是第一個組件導向的程序語言,但需注意C#程序主要在Windows環境下運行。
C. 如何用C#動態編譯,執行代碼 CSharpCodeProvider
如何用C#動態編譯、執行代碼
在開始之前,先熟悉幾個類及部分屬性、方法:CSharpCodeProvider、ICodeCompiler、CompilerParameters、CompilerResults、Assembly。
一、CSharpCodeProvider
提供對C#代碼生成器和代碼編譯器的實例的訪問。如果要動態生成VB代碼,可以使用VBCodeProvider。
CreateCompiler():獲取編譯器的實例。
二、ICodeCompiler
定義用於調用源代碼編譯的介面或使用指定編譯器的CodeDOM樹。每種編譯方法都接受指示編譯器的CompilerParameters對象,並返回指示編譯結果的CompilerResults對象。
CompilerAssemblyFromSource(CompilerParameters option, string source):使用指定的編譯器,從包含源代碼的字元串設置編譯程序集。
三、CompilerParameters
表示用於調用編譯器的參數。
ReferencedAssemblies:獲取當前項目所引用的程序集。Add方法為程序集添加引用。
GenerateExecutable:獲取或設置一個值,該值指示是否生成可執行文件。若此屬性為false,則生成DLL,默認是false。
GenerateInMemory:獲取或設置一個值,該值指示是否在內存中生成輸出。
四、CompilerResults
表示從編譯器返回的編譯結果。
CompiledAssembly:獲取或設置以編譯的程序集,Assembly類型。
五、Assembly
就是程序集了(不知道如何描述了)。
大致了解了以上知識之後,就可以使用C#動態的編譯並執行代碼了,一下是一段示常式序:
using System;
using System.Reflection;
using System.Globalization;
using Microsoft.CSharp;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Text;
namespace ConsoleApplication1
{
public class Program
{
static void Main(string[] args)
{
// 1.CSharpCodePrivoder
CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();
// 2.ICodeComplier
ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();
// 3.CompilerParameters
CompilerParameters objCompilerParameters = new CompilerParameters();
objCompilerParameters.ReferencedAssemblies.Add("System.dll");
objCompilerParameters.GenerateExecutable = false;
objCompilerParameters.GenerateInMemory = true;
// 4.CompilerResults
CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, GenerateCode());
if (cr.Errors.HasErrors)
{
Console.WriteLine("編譯錯誤:");
foreach (CompilerError err in cr.Errors)
{
Console.WriteLine(err.ErrorText);
}
}
else
{
// 通過反射,調用HelloWorld的實例
Assembly objAssembly = cr.CompiledAssembly;
object objHelloWorld = objAssembly.CreateInstance("DynamicCodeGenerate.HelloWorld");
MethodInfo objMI = objHelloWorld.GetType().GetMethod("OutPut");
Console.WriteLine(objMI.Invoke(objHelloWorld, null));
}
Console.ReadLine();
}
static string GenerateCode()
{
StringBuilder sb = new StringBuilder();
sb.Append("using System;");
sb.Append(Environment.NewLine);
sb.Append("namespace DynamicCodeGenerate");
sb.Append(Environment.NewLine);
sb.Append("{");
sb.Append(Environment.NewLine);
sb.Append(" public class HelloWorld");
sb.Append(Environment.NewLine);
sb.Append(" {");
sb.Append(Environment.NewLine);
sb.Append(" public string OutPut()");
sb.Append(Environment.NewLine);
sb.Append(" {");
sb.Append(Environment.NewLine);
sb.Append(" return \"Hello world!\";");
sb.Append(Environment.NewLine);
sb.Append(" }");
sb.Append(Environment.NewLine);
sb.Append(" }");
sb.Append(Environment.NewLine);
sb.Append("}");
string code = sb.ToString();
Console.WriteLine(code);
Console.WriteLine();
return code;
}
}
}
D. 誰給簡單介紹一下C#
特點有很多,簡單易上手是比較明顯的
編程方式。。。你指什麼?
主要應用:網路,WEB開發
簡單,但是依然有它需要長時間研究的地方
IDE:VS系列,2003,2005,2008等
可以游戲開發,理論上是都能做的