首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

Visual Studio:Java 開發者轉型 C# 完全指南(上)

     編輯:關於C#

本系列針對 Java 開發者,系統對比 C# 與 Java 的異同。上篇涵蓋:原始檔慣例、命名空間 vs 套件、資料類型、列舉、字串處理、轉型規則、值/參考類型、裝箱拆箱、運算子、流程控制、存取修飾詞、建構函式、Main 入口點、參數傳遞、屬性、結構、陣列、繼承基礎。

核心相似處

  • 同源於 C++,編譯為中間碼(Java Bytecode / CIL)
  • 執行環境:JVM vs CLR
  • 自動垃圾回收、強型別檢查、單一繼承+多介面實作
  • 例外處理架構相似

原始檔慣例差異

項目JavaC#
副檔名.java.cs
單檔多 public 類別不允許允許
檔名必須符合類別名是否
套件/命名空間關鍵字packagenamespace
匯入/引用關鍵字importusing
單檔多命名空間不允許允許

C# using 可建立別名:using Short = Long.Namespace.Name;

資料類型對照

C# 所有基本類型均為 System 命名空間結構體,提供別名:

C# 別名.NET 類型寬度備註
sbyteSystem.SByte8 位有號
byteSystem.Byte8 位無號
shortSystem.Int1616 位
ushortSystem.UInt1616 位無號
intSystem.Int3232 位
uintSystem.UInt3232 位無號
longSystem.Int6464 位
ulongSystem.UInt6464 位無號
floatSystem.Single32 位
doubleSystem.Double64 位
decimalSystem.Decimal128 位高精度財務計算
charSystem.Char16 位Unicode
boolSystem.BooleanJava 為 boolean

基本類型可直接呼叫方法:int i=10; i.ToString();(自動裝箱)。

列舉

C# 支援 enum(Java 1.5 前無):

public enum Color { Green, Orange, Red, Blue }
public enum ColorValue { Green=10, Orange=20, Red=30, Blue=40 }
Color fav = Color.Blue;
Console.WriteLine((int)fav); // 輸出 3 或 40

字串處理

  • 不可變性相同
  • 比較:C# 直接用 ==/!= 比較值(Java 需 equals())
  • 字面常量:@"C:\Path\File.txt" 免轉義(Java 無對應)
  • 高效串接:System.Text.StringBuilder(對應 Java StringBuffer)

轉型規則

隱式擴展轉換(如 int → long)、顯式縮小轉換((int)longVar)規則與 Java 相同。C# 額外提供 checked/unchecked 控制溢位檢查。

值類型 vs 參考類型

  • 值類型:基本類型、struct、enum。變數直接包含資料,指派會複製。
  • 參考類型:class、interface、delegate、陣列。變數存放參考,指派複製參考指向同一物件。

裝箱/拆箱:值類型 ↔ 參考類型(object)轉換。C# 自動處理;Java 需手動包裝/解包裝類別。

運算子差異

  • C# 多 checked/unchecked(溢位控制)、is(型別檢查)、sizeof(需 unsafe)、typeof/GetType()(反射)
  • Java 獨有 >>>(無號右移),C# 靠無號類型 + >> 達成

流程控制

  • switch:C# 禁止 fall-through,每個 case 必須以 break/goto 結束;支援字串 case
  • foreach:C# 獨有,遍歷 IEnumerable(Java 1.5 引入 for-each)
  • goto:C# 保留並可用(Java 保留未實作)

存取修飾詞

修飾詞C#Java
public全域可見全域可見
protected衍生類可見同套件+衍生類
private類別內可見類別內可見
internal同組件可見無對應(套件可見)
protected internal同組件或衍生類無對應

C# 預設 private,Java 預套件可見。sealed 對應 Java final(類別不可繼承)。readonly(執行期初始化)對應 final(編譯期常數)。

建構函式與 Main

  • C# Main() 大寫開頭,回傳 int/void,可選 string[] args
  • 參數預設傳值;ref(需初始化)、out(不需初始化、方法內必指派)實現傳參考
  • params 可變參數:void Avg(string title, params int[] vals)

屬性與結構

屬性(get/set 存取子)封裝欄位存取。結構(struct)為值類型,不可繼承、無預設建構函式覆寫、預設欄位自動歸零。

陣列宣告差異

// C# 方括號在類型後
int[] arr = new int[5];
int[] arr = {1,2,3,4,5}; // 初始化器數量必符合大小

// 多維陣列(矩形)
int[,] matrix = new int[5,4];
matrix[4,3] = 906;

// 交錯陣列
int[][] jagged = new int[2][];
jagged[0] = new int[4];
jagged[1] = new int[3];

System.Array 提供 Sort()、Reverse() 等靜態方法。

繼承基礎

C# 以冒號同時表達繼承類別與實作介面:class Derived : Base, IInterface。基類必須在最左。不支援多重繼承。

public class Point { /* x, y, X, Y 屬性 */ }
public class ColorPoint : Point { /* 新增 ScreenColor 屬性 */ }

下篇將深入建構函式鏈結、方法覆寫、抽象類別、介面、運算子多載、例外、索引子、屬性、委派/事件、GC、unsafe 程式碼等進階主題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved