//=====================================================================
//TITLE:
// C++ VS C#(2):字符串,命名空間
//AUTHOR:
// norains
//DATE:
// Tuesday 30-November-2010
//Environment:
// Visual Studio 2010
// Visual Studio 2005
//=====================================================================
1. 字符串
無論是C++還是C#,都支持字符串,都可以用string來進行保存。不過,string在C#中是內置類型,但在C++裡卻必須要借助於STL。還有一點很有意思的是,string在C#中存儲的是UNICODE,但在C++卻是ANSIC。如果要讓C++支持UNICODE的字符串,則必須使用wstring。
這兩種語言,對於字符串都可以這樣操作:string strVal = “Hello,”;
strVal += “World!”;
如果字符串帶有換行或別的轉意字符,都可以使用“”來表示,如: strVal = “Hello,World!
I like it!”;
strVal = “He said:”It’s you!””;
但C#有個增強的特性,可以在第一個引號前加“@”,表示在“@”之後,“;”之前的引號的內容原封不動作為數值。簡單點說,上面的兩個語句,用C#還可以以這種形式表示: strVal =@ “Hello,World!
I like it!”;
strVal = @“He said:”It’s you!””;
2. 命名空間
C++和C#都支持命名空間,也就是namespace,並且都支持嵌套,如:namespace Root
{
namespace Leaf
{
enum Type
{
TYPE_NORMAL,
TYPE_HIGH,
};
}
}
雖然聲明一致,但使用上卻大相徑庭。對於C++來說,命名空間的必須使用“::”來進行標注,如: Root::Leaf::Type type = Root::Leaf::TYPE_NORMAL;
但C#卻是采用“.”:Root.Leaf.Type type = Root.Leaf.Type.TYPE_NORMAL;
如果以操作的觀點來看,本例中的Type在C++中更像是類的類型,而C#則是對象的類型。
還有一個很有意思的區別,C#不能直接在命名空間中直接聲明變量或函數,如:
namespace Root
{
namespace Leaf
{
int iVal = 0;
void Run(){};
}
}
這個代碼段在C++能夠很完美地進行編譯,但在C#中卻會提示出錯:error CS0116: A namespace cannot directly contain members such as fields or methods