เผอิญว่าวิชา 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# จะรู้ว่ามันคือ 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 ด้วยเนี่ย