csharp-and-dotnet

ครั้งแรกกับ C#

posted on 28 Oct 2004 22:48 by tidno1  in csharp-and-dotnet

เผอิญว่าวิชา OS อ. ได้ให้ใช้ C# ในการเรียน เลยต้องลองมานั่งเขียนโดยใช้ SharpDevelop ร่วมกับ .NET SDK และแล้วโค้ดมาตรฐานโลก Hello World ก็ได้ออกมา

using

string

s="Hello World";Console.WriteLine(s);
}

หลังจากลองรันดูก็เจอ error message

hello.exe' does not have an entry point defined

Build complete -- 1 errors, 0 warnings

ลองนั่งดูตั้งนานก็งง ๆ no entry point เอ๊ะอะไรหว่า ไม่มี main เหรอ

เลยลองเอาโค้ดจากเว็บมารันดูจึงได้เห็นอะไรแปลก ๆ

public

โอ้ แม่เจ้า !!

static void Main(){
System;
public static void main(){

ครั้งสองกับ C#

posted on 28 Oct 2004 23:22 by tidno1  in csharp-and-dotnet

ต่อเลยละกันกับครั้งสอง
ถ้าเป็น C เวลาจะพิมพ์ตัวแปรสองตัวออกจอก็คงจะต้องทำอะไรประมาณนี้

printf("%d %d\n", x, y);

หรือถ้าเป็น C++ ก็คงยุ่งยากหน่อยคือ

cout << x << y << endl ;

แต่ถ้าเป็น C# ก็จะประมาณนี้

System.Console.WriteLine("{0} {1} ", x, y);

ดูแล้วเท่ดีแฮะ

อ้อ ถ้าคนพอรู้จัก C# จะรู้ว่ามันคือ C++(ISO) รวมกับ Java 1.2 ผนวกเข้าด้วยเทคโนโลยี .NET บางอย่างก็เลยได้แนวของ C++ มา บางอย่างก็ได้ของ Java มา

ตัวอย่างเช่นตัวแปรสตริงประกาศด้วย string ไม่ใช่ String แบบของ Java แต่ว่า parameter list ของ main จะเป็น string[] args เป็น style ของ Java

หรือบางอย่างที่คล้ายกัน ๆ แต่ไม่เหมือนอย่างชัดเจน เช่นการมี pass by reference โดยใช้ keyword ref วางไว้ข้างหน้า type ของตัวแปรเช่น

void f(ref int x){
...
}

แต่บางอย่างก็เป็นของใหม่(อย่างน้อยก็ใหม่สำหรับผม) เช่น

intg(out int x){
x=5;
return 10;
}

เป็นการส่งค่าตัวแปรออกมาทาง parameterของ function ได้เลย
ข้อแตกต่างกันระหว่าง pass by reference กับการใช้ out ก็คือตัวแปรที่ถูก pass by reference จะต้องมีการกำหนดค่าก่อน(เป็นข้อกำหนดของ C# ที่จะต้องกำหนดค่าตัวแปรก่อนการใช้งาน)

หรือการที่ C# พยายามตัด pointer ออกไปเหมือนดังที่ Java ทำ
แต่ด้วยการที่มันเป็นลูกหลานของ C++ มันจึงยังแอบถูกเก็บไว้อยู่ แต่ถ้าจะใช้ต้องอยู่ภายใต้ส่วนที่เรียกว่า unsafe มันก็ทำให้คนที่เขียน C มาก่อนยังคงสะดวกอยู่บ้าง เพราะการตัด pointerออกไปจากภาษา ก็ทำให้เขียนยากขึ้นในบางกรณีนะ

แต่ทำไมต้องใช้ Main ด้วยเนี่ย