C# ภาคต่อมา

posted on 15 Nov 2004 14:21 by tidno1 in csharp-and-dotnet

หลังจากเขียนตอนที่แล้วไว้เมื่อ 2 อาทิตย์ก่อน วันนี้เรามาต่อกันเลยดีกว่า

ตอนในวันนี้จะเป็นความแตกต่างของ Java กับ C# เนื่องจากผมต้องใช้ทั้ง 2 ภาษาในเทอมนี้ ทำให้เกิดความสับสนขึ้นเล็กน้อย และอยากจะนำมารวบรวมไว้ในนี้ เผื่อ Java programmer บางคน จะได้ทำความเข้าใจกับ C# ได้อย่างรวดเร็ว

เริ่มกันเลยดีกว่า

?: ใน C, C++ และ C# เนี่ย operator ตัวนี้มีการ associate แบบ right to left แต่ ใน java เป็นแบบ left to right
ถึงแม้จะไม่ค่อยมีใครเขียน ?: แบบซ้อนกัน นักหรอก แต่ก็จำไว้ก่อนก็ดี

string กับ String ใน Java String ก็คือคลาสธรรมดาตัวนึง จึงขึ้นต้นด้วยตัวอักษรตัวใหญ่ ใน C# ก็เช่นกัน เพียงแต่ว่า C# มีการ alias string = System.String เรียบร้อยแล้ว เราจึงสามารถประการตัวแปรสตริงได้ด้วย keyword string แต่จะใช้ String เหมือน Java ก็ไม่ผิดแต่อย่างใด

เช่นกันกับ object ซึ่งเป็นการ alias มาจาก System.Object ซึ่งเทียบเท่ากับ class Object ใน Java

ใน C# มีการเพิ่ม type ของตัวแปรขึ้นมา คือ sbyte(signed byte) ushort(unsigned short) uint(unsigned int) ulong(unsigned long) ซึ่งสองตัวหลังก็คงไม่แปลกนักที่ภาษาตระกูล C จะมี แต่ความสับสนมันจะอยู่ที่ตัวแรกนี่แหละ เพราะ sbyte ใน C# มันก็คือ byte ธรรมดาใน Java ส่วน byte ของ C# ก็คือ unsigned byte (ที่ไม่มีใน Java)
และ ก็ยังมี type พวก floating point เพิ่มเข้ามานั่นคือ decimal เป็น 128-bit 28 significant digit ออกแบบมาไว้สำหรับงานด้านการเงิน ใช้ตัวอักษร 'M' หรือ 'm' ต่อท้าย literal เช่น
decimal x = 12.00m;
ถ้าจำไม่ผิด type นี้จะไม่มีการทำ auto cast นะ ต้อง cast เอง

ที่โดนตัดไปนิดหน่อยคือ C# ไม่มี literal ของเลขฐานแปดแล้ว

super ของ Java ก็คือ base ใน C#
final ของ Java ก็คือ sealed(modifier ของ class) readonly(modifier ของ field) ใน C#

C# ตัดเรื่องการใช้ break และ continue กับ label ดังเช่น
mylabel:
// statements
while (/* some condition */) {
/* ... */
break mylabel;
}
ใน Java

switch case ของ C# ไม่สามารถปล่อยให้ไหลต่อ ๆ กันได้
เช่น code ด้านล่างนี้ทำให้เกิด complile error ได้
switch(x){
case 0 : Console.Write("0");
case 1 : Console.Write("1");
}
อย่างนี้ถึงจะถูกต้อง
switch(x){
case 0 :
case 1 : Console.Write("01");
break;
}

วันนี้พอแค่นี้ก่อนดีกว่า ไว้นึกเรื่องดี ๆ ได้ (และไม่ขี้เกียจ) จะมาเขียนเพิ่มละกัน


แก้ไขเมื่อ 15/11/2547 14:22:13

Comment

Comment:

Tweet

mwwgzoin oefmidli ryjkehpo

#14 By QAQRcHXctzZzgxs (94.102.49.213) on 2009-08-14 23:27

cwjbvhrk beccwjqr ikoxdjta

#13 By ckpXZOmtTEE (94.102.49.213) on 2009-08-14 20:33

hwukurew fgyhjwlh nenfaono

#12 By TLsHrVlWxcRuqioDNy (94.102.49.213) on 2009-08-14 19:04

mtpvsfwv zbbckcye pflpjnju

#11 By IqVzxHrW (94.102.49.213) on 2009-08-14 16:18

ayqschxd glswthxq uxbwvayn

#10 By BxRXmlxEwv (94.102.49.213) on 2009-08-14 14:52

scplcizg efpwmqrh iavjfdpb

#9 By jUwUdoyxlaEZyPXI (95.169.190.71) on 2009-08-01 12:35

adzfkzsv blksbmpk ezwjoebe

#8 By epRaAUKxxQiOGyW (95.169.190.71) on 2009-08-01 11:17

iwjxupln qnnqrgpt iigjhawk

#7 By psDKLfHyIlfytku (95.169.190.71) on 2009-08-01 09:54

aoyxtyfy jpjcuedi qeuhuypf

#6 By bIVdWoDiM (95.169.190.71) on 2009-08-01 08:35

oIdUiO gzwjnjvm vufctmpr kbhvybiy

#5 By wJzExhWGBvtwiZreHrd (89.248.172.50) on 2009-07-28 15:03

ตอบจอน
ตระกูล C นี่ไม่แน่ใจเหมือนกันแฮะ ตอนเขียนไม่ได้นึกไง เท่าที่รู้มาก็ไม่เจอแบบ left to right น้า

#4 By TiD (158.108.211.224) on 2004-11-22 02:27

C, C++ และ C# มัน right-to-left เหรอ?
ไม่ใช่ว่ามันไม่ได้กำหนดไว้เป็นมาตรฐานเหรอครับ
เวลาเขียนโปรแกรมเลยต้องคอยระวังจุดนี้ไว
เพราะแต่ละ compiler อาจแปลไม่เหมือนกัน

แต่ Java กำหนดไว้ตายตัว
คือ left-to-right

#3 By ABZee (61.90.59.22) on 2004-11-22 01:43

ไม่รู้เรื่องแฮะ

#2 By A N E W on 2004-11-22 00:37

จะเขียนถึง network programming เลยรึเปล่าฮะ
อยากอ่านเรื่อง socket เขียนไปเรื่อยๆนะครับ
ทุกวันนี้เขียน java อยู่ อยากลองเปลี่ยนเป็น C# ดูบ้าง

#1 By nuts on 2004-11-15 17:21