此程序的輸出告訴我們
結果是 System
Double 類型
選擇它是因為System
Math
PI 是這種類型
Calculated area is =
The result is of type System
Double
流程控制 在這兩種語言中
流程控制語句是非常相似的
但是這一部分也會討論它們的一些細微差別
分支語句
分支語句根據特定的條件改變運行時程序執行的流程
if
else 和 else if
這些在兩種語言中是一樣的
switch 語句
在兩種語言中
switch 語句都提供條件多分支操作
但是有點不同的是
Java 允許您
越過
一個 case 並執行下一個 case
除非您在 case 的末尾使用了 break 語句
然而
C# 需要在每個 case 的末尾都使用 break 或 goto 語句
如果兩者都不存在
則編譯器會產生下列錯誤
Control cannot fall through from one case label to another
不過請注意
在沒有指定要執行的代碼的地方
當 case 匹配時
控制會越過隨後的 case
當在 switch 語句中使用 goto 時
我們只能跳至同一 switch 中的另一個 case 塊
如果我們想要跳至 default case
我們可以使用
goto default;
否則
我們需要使用
goto case cond;
其中 cond 是我們希望跳至的 case 的匹配條件
Java 的 switch 語句的另一個不同之處在於
在 Java 中
我們只能對整數類型使用 switch 語句
而 C# 允許我們對字符串變量使用 switch 語句
例如
下面的程序在 C# 中是合法的
但在 Java 中卻是不合法的
switch (args[
])
{
case
copy
:
break;
case
move
:
goto case
delete
;
break;
case
del
:
case
remove
:
case
delete
:
break;
default:
break;
}
goto 的返回
在 Java 中
goto 是一個沒有實現的保留關鍵字
然而
我們可以使用帶有 break 或 continue 標簽的語句來達到與 goto 相似的目的
C# 允許 goto 語句跳至帶有標簽的語句
不過請注意
為了跳至一個特定的標簽
goto 語句必須在該標簽的范圍內
換句話說
goto 不可用來跳進一個語句塊(不過
它可以跳出一個語句塊)
跳出一個類
或退出 try
catch 語句中的 finally 塊
不過請注意
在大多數情況下
我們都不鼓勵您使用 goto
因為它違反了面向對象編程的良好實踐
循環語句
循環語句重復指定的代碼塊
直到滿足給定的條件為止
for 循環
在兩種語言中
for 循環的語法和操作均相同
for (initialization; condition; expression)
statement;
foreach 循環
C# 引入了一種新的循環類型
稱為 foreach 循環(類似於 Visual Basic 的 For Each)
foreach 循環允許遍歷支持 IEnumerable 接口的容器類中的每一項(例如
數組)
下面的代碼說明了如何使用 foreach 語句來輸出一個數組的內容
public static void Main()
{
int[] arr
= new int[] {
};
foreach ( int i in arr
)
{
Console
WriteLine(
Value is {
}
i);
}
}
在 C# 中的數組部分
我們將更詳細地介紹 C# 中的數組
while 和 do
while 循環
在兩種語言中
while 和 do
while 語句的語法和操作均相同
while (condition)
{
//statements
}
As usual
don
t forget the trailing ; in do
while loops:
do
{
//statements
}
while(condition);
類基礎 訪問修飾符
C# 中的修飾符與 Java 大致相同
我們將在這一部分介紹其中的一些細微差別
每個類成員或類本身都可以用訪問修飾符進行聲明
以定義許可訪問的范圍
沒有在其他類中聲明的類只能指定 public 或 internal 修飾符
而嵌套的類(如其他的類成員)可以指定下面五個修飾符中的任何一個
public — 對所有類可見
protected —僅從派生類中可見
private — 僅在給定的類中可見
internal — 僅在相同的程序集中可見
protected internal — 僅對當前的程序集或從包含類中派生的類型可見
public
protected 和 private 修飾符
public 修飾符使得可以從類內外的任何地方訪問成員
protected 修飾符表示訪問僅限於包含類或從它派生的類
private 修飾符意味著只可能從包含類型中進行訪問
internal 修飾符
internal 項只可以在當前的程序集中進行訪問
NET 中的程序集大致等同於 Java 的 JAR 文件
它表示可以從中構造其他程序的生成塊
protected internal 修飾符
protected internal 項僅對當前程序集或從包含類派生的類型可見
在 C# 中
默認訪問修飾符是 private
而 Java 的默認訪問修飾符是包范圍
sealed 修飾符
在其類聲明中帶有 sealed 修飾符的類可以認為是與抽象類完全相反的類 — 它不能被繼承
我們可以將一個類標記為 sealed
以防止其他類重寫它的功能
自然地
sealed 類不能是抽象的
同時還需要注意
該結構是隱式密封的
因此
它們不能被繼承
sealed 修飾符相當於在 Java 中用 final 關鍵字標記類
readonly 修飾符
要在 C# 中定義常量
我們可以使用 const 或 readonly 修飾符替換 Java 的 final 關鍵字
在 C# 中
這兩個修飾符之間的區別在於
const 項是在編譯時處理的
而 readonly 字段是在運行時設置的
這可以允許我們修改用於在運行時確定 readonly 字段值的表達式
這意味著給 readonly 字段的賦值可以出現在類構造函數及聲明中
例如
下面的類聲明了一個名為 IntegerVariable 的 readonly 變量
它是在類構造函數中初始化的
using System;
public class ReadOnlyClass
{
private readonly int IntegerConstant;
public ReadOnlyClass ()
{
IntegerConstant =
;
}
// We get a compile time error if we try to set the value of the readonly
// class variable outside of the constructor
public int IntMember
{
set
{
IntegerConstant = value;
}
get
{
return IntegerConstant;
}
}
public static void Main(string[] args)
{
ReadOnlyClass obj= new ReadOnlyClass();
// We cannot perform this operation on a readonly field
obj
IntMember =
;
Console
WriteLine(
Value of IntegerConstant field is {
}
obj
IntMember);
}
}
注意
如果 readonly 修飾符應用於靜態字段
它就應該在該靜態字段中進行初始化
類的構造函數
Main() 方法 每個 C# 應用程序都必須#Arrays in C#只能包含一個 Main() 方法
Main() 方法指定程序從何處開始執行
注意
在 C# 中
Main() 用大寫字母開頭
而 Java 使用小寫的 main()
Main() 只能返回 int 或 void
並且有一個可選的字符串數組參數來表示命令行參數
static int Main (string[] args)
{
return
;
}
字符串數組參數可以包含任何傳入的命令行參數
這與 Java 中完全一樣
因此
args[
] 指定第一個命令行參數
而 args[
] 表示第二個參數
等等
與 C++ 不同的是
args 數組不包含 EXE 文件的名稱
其他方法 當將參數傳遞給方法時
它們可能通過值傳遞
也可能通過引用傳遞
值參數只提取任何變量的值以在方法中使用
因而調用代碼中的變量值不受方法中對這些參數所執行的操作的影響
而引用型參數指向在調用代碼中聲明的變量
因而在通過引用傳遞時
方法將修改該變量的內容
通過引用傳遞
在 Java 和 C# 中
引用對象的方法參數總是通過引用傳遞
而基本數據類型參數則通過值傳遞
在 C# 中
所有參數在默認情況下都是通過值傳遞的
要通過引用進行傳遞
我們需要指定關鍵字 ref 或 out 中的一個
這兩個關鍵字的不同之處在於參數的初始化
ref 參數必須在使用前進行初始化
而 out 參數無需在傳遞前進行顯式初始化
並且任何先前的值都會被忽略
請注意
當方法將引用類型作為參數使用時
引用本身是通過值傳遞的
然而
引用仍然指向內存中的同一對象
因此對對象的屬性所做的任何改變在方法退出之後將保持不變
但是
因為引用本身是通過值傳遞的
所以在方法內它應該改為指向一個不同的對象甚至一個新對象
而一旦方法執行完畢
引用就會恢復為指向原來的對象
即使原來的對象是未賦值的也同樣如此
ref 關鍵字
當我們希望調用
From:http://tw.wingwit.com/Article/program/ASP/201311/21656.html