ความแตกต่างระหว่างประเภทและระดับคืออะไร?


153

สิ่งที่ทำให้แตกต่างจากชั้นเรียนและในทางกลับกัน?

(ในความหมายทั่วไปผู้ไม่เชื่อเรื่องภาษา)


3
C ++ ที่มีประสิทธิภาพรายการ 19: ออกแบบคลาสให้เหมือนการออกแบบประเภท
Brent81

คำตอบ:


121

คำตอบต่อไปนี้มาจากหนังสือ Gof ( รูปแบบการออกแบบ )

คลาสของวัตถุกำหนดวิธีการนำวัตถุไปใช้คลาสจะกำหนดสถานะภายในของวัตถุและการใช้งานการดำเนินการ

ในทางกลับกันประเภทของวัตถุ จะอ้างถึงส่วนต่อประสานเท่านั้น - ชุดของคำขอที่สามารถตอบสนองได้

วัตถุสามารถมีได้หลายประเภทและวัตถุที่มีคลาสต่างกันสามารถมีชนิดเดียวกันได้

//example in c++
template<typename T> 
const T & max(T const & a,T const &b)
{
return a>b?a:b;  //> operator of the type is used for comparison
}

ฟังก์ชั่นสูงสุดต้องการประเภทที่มีการดำเนินงาน>ด้วยประเภทของตัวเองเป็นหนึ่งในนั้นอินเตอร์เฟซชั้นเรียนใด ๆ ที่ตอบสนองความต้องการข้างต้นสามารถนำมาใช้ในการสร้างฟังก์ชั่นสูงสุดเฉพาะสำหรับชั้นเรียนนั้น


56

ฉันมักจะนึกถึง 'ประเภท' เป็นคำศัพท์ใน 'คลาส' และ 'พื้นฐาน'

int foo; // Type is int, class is nonexistent.

MyClass foo; // Type is MyClass, class is MyClass


7
ที่ดีและรัดกุมคำอธิบาย :)
aku

3
ใน. NET มันควรจะเหมือนกันแม้แต่ primitives ก็เป็นคลาส (หรือ structs มากกว่านั้น)
dalle

4
@ Dalle: เห็นด้วยไม่มีความแตกต่างโดยธรรมชาติระหว่างประเภทและชั้นเรียน ตัวอย่างของ Eddie นั้นขึ้นอยู่กับ C ++ / Java เป็นอย่างมาก มันไม่ได้เป็นความหมายทั้งหมด
Robert Gould

ฉันคิดว่ามันคงยากที่จะได้คำนิยาม "THE" ของ 'ชนิด' กับคลาส หลายภาษามีระบบพิมพ์ของตัวเอง หนึ่งคำนิยามที่ฉันได้ยินสำหรับ. NET คือ 'ประเภท' มีทั้งการอ้างอิงและประเภทค่าในขณะที่คลาสใช้เพื่ออธิบายประเภทการอ้างอิงเท่านั้น
Eddie Parker

2
ไม่สั้นเกินไปสำหรับ System.Int32 ชนิดใช่หรือไม่ ในคำอื่น ๆ : int foo; // Type is int, คลาสคือ System.Int32?
Svish

51

แรงบันดาลใจจากWikipedia ...

ในแง่ทฤษฎีประเภท

  • ประเภทเป็นอินเตอร์เฟซที่เป็นนามธรรม
    ประเภทโดยทั่วไปเป็นตัวแทนของคำนามเช่นบุคคลสถานที่หรือสิ่งของหรือสิ่งที่ระบุชื่อ

  • ชั้นแสดงให้เห็นถึงการดำเนินงานของชนิด
    มันเป็นโครงสร้างข้อมูลที่เป็นรูปธรรมและการรวบรวมรูทีนย่อย

    คลาสคอนกรีตที่ต่างกันสามารถสร้างออบเจกต์ที่เป็นนามธรรมชนิดเดียวกัน (ขึ้นอยู่กับระบบของประเภท)

    * ตัวอย่างหนึ่งอาจใช้ประเภทที่ Stackมีสองคลาส : SmallStack(เร็วสำหรับสแต็กขนาดเล็ก แต่ปรับขนาดได้ไม่ดี) และScalableStack (ปรับขนาดได้ดี แต่ค่าใช้จ่ายสูงสำหรับสแต็กขนาดเล็ก) *

    ในทำนองเดียวกันการเรียนได้รับอาจมีความแตกต่างกันหลายก่อสร้าง

ป้อนคำอธิบายรูปภาพที่นี่

ตัวอย่างกล้วย

  • Banana ประเภทจะเป็นตัวแทนของคุณสมบัติและการทำงานของกล้วยทั่วไป

  • ABCBananaและXYZBanana ชั้นเรียนจะเป็นตัวแทนของวิธีการผลิตกล้วย
    (ซัพพลายเออร์กล้วยที่แตกต่างกันในชีวิตจริงหรือโครงสร้างข้อมูลที่แตกต่างกันและฟังก์ชั่นเพื่อเป็นตัวแทนและวาดกล้วยในวิดีโอเกม)

    ABCBananaระดับแล้วสามารถผลิตกล้วยโดยเฉพาะอย่างยิ่งที่มี อินสแตนซ์ของABCBanana ระดับที่พวกเขาจะเป็นวัตถุของประเภทกล้วย

ไม่เป็นเรื่องยากที่โปรแกรมเมอร์จัดเตรียมการใช้งานแบบเดี่ยวและประเภทเดียว ในกรณีนี้ชั้นชื่อมักจะเป็นเหมือนกันกับชื่อประเภท แต่ยังคงมีประเภท (ซึ่งสามารถแยกได้ในอินเทอร์เฟซหากต้องการ) และการนำไปใช้ (ซึ่งจะใช้อินเทอร์เฟซแยกต่างหาก) ซึ่งสร้างอินสแตนซ์ (วัตถุ) ของคลาส


3
ในฐานะที่เป็นคนที่ดิ้นรนเพื่อเรียนรู้เว้นแต่จะได้รับตัวอย่างจากโลกแห่งความจริงมันช่วยฉันได้จริงๆ ขอบคุณ
alexc95

13

Type เป็นคำศัพท์ในร่มสำหรับเทมเพลตหรือแนวคิดของวัตถุที่มีอยู่ทั้งหมด คลาสเป็นเทมเพลตวัตถุหนึ่งรายการ ดังนั้นเป็นประเภทโครงสร้างประเภทจำนวนเต็มประเภทอินเตอร์เฟซ ฯลฯ ทุกประเภท

หากคุณต้องการคุณสามารถดูได้ด้วยวิธีนี้: ประเภทคือแนวคิดหลัก แนวคิดอื่น ๆ ทั้งหมด: คลาส, อินเตอร์เฟส, โครงสร้าง, จำนวนเต็ม ฯลฯ สืบทอดมาจากแนวคิดนี้พวกเขาเป็นประเภท


4

ประเภทมีคำอธิบายของข้อมูล (เช่นคุณสมบัติการดำเนินการ ฯลฯ )

Class เป็นชนิดเฉพาะ - เป็นแม่แบบในการสร้างอินสแตนซ์ของวัตถุวัตถุ

คลาสที่พูดอย่างเคร่งครัดเป็นแนวคิดพิเศษสามารถมองได้ว่าเป็นแพคเกจที่มีชุดย่อยของเมทาดาทาอธิบายบางแง่มุมของวัตถุ

ตัวอย่างเช่นใน C # คุณสามารถค้นหาอินเตอร์เฟสและคลาสได้ ทั้งคู่เป็นประเภท แต่อินเตอร์เฟสสามารถกำหนดสัญญาบางสัญญาเท่านั้นและไม่สามารถสร้างอินสแตนซ์ได้ซึ่งแตกต่างจากคลาส

คลาสที่พูดง่าย ๆคือชนิดพิเศษที่ใช้เพื่อห่อหุ้มคุณสมบัติและพฤติกรรมของวัตถุ

Wikipedia สามารถให้คำตอบที่สมบูรณ์ยิ่งขึ้นแก่คุณ:


4

เพื่อแสดงให้เห็นถึงวิธีที่เร็วที่สุด:

โครงสร้างเป็นชนิด แต่โครงสร้างไม่ได้เป็นคลาส

อย่างที่คุณเห็นประเภทเป็นคำที่ "เป็นนามธรรม" สำหรับคำจำกัดความของคลาสเท่านั้น แต่ยังมีโครงสร้างและชนิดข้อมูลดั้งเดิมเช่น float, int, bool


2
มันจะเป็นการดีถ้าจะพูดถึง. net CLR เป็นตัวอย่างของเฟรมเวิร์กที่มีประเภทที่มีอยู่ซึ่งไม่ใช่คลาส (Java อาจถูกอ้างถึงเป็นอีกประเภทหนึ่ง อย่างไรก็ตามรอยย่นเล็ก ๆ น้อย ๆ เป็นพิเศษใน. net คือType(เป็นตัวพิมพ์ใหญ่ตามที่แสดง) เป็นชื่อย่อของคลาสระบบ ( System.Type) ซึ่งใช้เพื่อเก็บคำอธิบายของประเภท
supercat

3

ประเภทคือแนวคิดของคลาส ในความหมายที่กว้างขึ้นคลาสเป็นรูปแบบหนึ่งประเภท

เกี่ยวข้องกับคลาสอย่างใกล้ชิดคือส่วนต่อประสานซึ่งสามารถมองว่าเป็นคลาสที่พิเศษมาก - เป็นนามธรรมที่บริสุทธิ์ เหล่านี้ก็เป็นประเภท

ดังนั้น "ประเภท" จึงครอบคลุมคลาสอินเทอร์เฟซและในภาษาส่วนใหญ่ด้วย นอกจากนี้แพลตฟอร์มอย่าง dot-net CLR ก็มีประเภทของโครงสร้างด้วยเช่นกัน


rajKumar คำถามของคุณค่อนข้างคลุมเครือ คุณเกี่ยวกับ "พิมพ์" เป็นคุณลักษณะของภาษาหรือเป็นแนวคิดทั่วไปหรือไม่
aku

ไม่ใช่ประเภทที่ผู้ใช้กำหนดเองทั้งหมดเป็นคลาส แต่อย่างน้อยก็ไม่ใช่ในทุกภาษา
jalf

ใช่, เห็นด้วยว่ามันเป็นลักษณะที่ผิด. อินเทอร์เฟซถูกกำหนดโดยผู้ใช้ด้วยและจะไม่มีประเภทที่ผู้ใช้กำหนดเอง ชั้นเป็นชนิดพิเศษที่ให้บริการมีความต้องการพิเศษ (การสร้างอินสแตนซ์ของวัตถุ)
aku

อินเทอร์เฟซเป็นเพียงชนิดพิเศษคลาสนามธรรมล้วนๆ แต่ยังคงเป็นประเภท (ในแง่ที่ดีกว่า)
Lawrence Dol

ซอฟต์แวร์ Monkey, interface ไม่ใช่คลาสนามธรรมล้วนเป็นแนวคิดพิเศษ "ผู้ใช้กำหนดเอง" ไม่ได้เป็นคุณสมบัติที่กำหนดของคลาส
aku

3

ในการเพิ่มอีกตัวอย่างของความแตกต่าง: ใน C ++ คุณมีตัวชี้และประเภทการอ้างอิงซึ่งสามารถอ้างถึงคลาส แต่ไม่ใช่คลาสในตัวมันเอง

Bar b; // b is of type "class Bar"
Bar *b2 = &b; // b2 is of type "pointer to Class Bar"
Bar &b3 = b; // b3 is of type "reference to Class Bar"
Bar *b4[7]; // b4 is of type "7-element array of pointers to Class Bar"
Bar ***b5; //b5 is of type "pointer to a pointer to a pointer to Class Bar"

โปรดทราบว่ามีเพียงคลาสเดียวที่เกี่ยวข้อง แต่สามารถใช้ชนิดจำนวนใกล้เคียงไม่ จำกัด ในบางภาษาฟังก์ชั่นจะถูกพิจารณาว่าเป็น "First-class-objects" ซึ่งในกรณีนี้ประเภทของฟังก์ชั่นจะเป็นคลาส ในคนอื่น ๆ ประเภทของฟังก์ชั่นเป็นเพียงตัวชี้ คลาสโดยทั่วไปมีแนวคิดของความสามารถในการเก็บข้อมูลตลอดจนการดำเนินการกับข้อมูลนั้น


3

ความคิดของฉันค่อนข้างสอดคล้องกับคำตอบของ aku

ฉันเห็นคลาสเป็นเทมเพลตสำหรับการสร้างวัตถุในขณะที่ประเภทเป็นวิธีการจัดประเภทวัตถุเหล่านั้นและให้อินเทอร์เฟซแก่พวกเขา

Python ยังเพิ่ม metaclasses ซึ่งเป็นเพียงกลไกในการสร้างคลาสในลักษณะเดียวกับคลาสที่สร้างออบเจ็กต์ (และทั้งคลาสและ metaclasses เป็นออบเจ็กต์ทั้งสอง)

การตอบสนองต่อคำถามเดียวกันใน lamba ที่ดีที่สุดดูเหมือนว่าฉันต้องการคำอธิบายที่สมบูรณ์แบบ


3

นำมาจากการอ้างอิงของ GoF จากด้านล่าง:

คลาสของวัตถุกำหนดวิธีการนำวัตถุไปใช้คลาสจะกำหนดสถานะภายในของวัตถุและการใช้งานการดำเนินการ

ในทางตรงกันข้ามประเภทของวัตถุ จะอ้างอิงถึงส่วนต่อประสาน - ชุดคำขอที่สามารถตอบสนองได้

ฉันต้องการให้ตัวอย่างโดยใช้ Java:

public interface IType {
}

public class A implements IType {
public A{};
}

public class B implements IType {
public B{};
}

ทั้งการเรียนAและการใช้อินเตอร์เฟซและทำให้เป็นประเภทB ITypeนอกจากนี้ใน Java ทั้งสองคลาสจะสร้างชนิดของตัวเอง (ตามลำดับเป็นชื่อคลาส) ดังนั้นคลาสAเป็นประเภทA และ ITypeคลาสBมีประเภทB และ ITypeพอใจ:

วัตถุสามารถมีได้หลายประเภทและวัตถุที่มีคลาสต่างกันสามารถมีชนิดเดียวกันได้

ความแตกต่างระหว่างชนิดย่อยและคลาสย่อยอาจช่วยให้เข้าใจปัญหานั้นได้เช่นกัน:

https://www.cs.princeton.edu/courses/archive/fall98/cs441/mainus/node12.html


2

ฉันคิดว่าประเภทเป็นชุดของสิ่งที่คุณสามารถทำได้ด้วยค่าเฉพาะ ตัวอย่างเช่นหากคุณมีค่าจำนวนเต็มคุณสามารถเพิ่มลงในจำนวนเต็มอื่น ๆ (หรือดำเนินการทางคณิตศาสตร์อื่น ๆ ) หรือส่งผ่านไปยังฟังก์ชันที่ยอมรับอาร์กิวเมนต์จำนวนเต็ม หากคุณมีค่าวัตถุคุณสามารถเรียกวิธีการที่กำหนดโดยระดับของมัน

เนื่องจากคลาสจะกำหนดสิ่งที่คุณสามารถทำได้กับวัตถุของคลาสนั้นคลาสจึงกำหนดประเภท คลาสนั้นยิ่งกว่านั้นเนื่องจากยังให้คำอธิบายถึงวิธีการใช้งาน (สิ่งที่ไม่ได้บอกเป็นนัยถึงชนิด) และวิธีการจัดวางฟิลด์ของวัตถุ

โปรดทราบว่าค่าวัตถุสามารถมีได้เพียงหนึ่งคลาสเท่านั้น แต่อาจมีหลายประเภทเนื่องจากทุกคลาสซูเปอร์คลาสจะมีชุดย่อยของฟังก์ชันการทำงานที่มีอยู่ในคลาสของวัตถุ

ดังนั้นแม้ว่าวัตถุและประเภทจะมีความสัมพันธ์กันอย่างใกล้ชิด แต่ก็ไม่ได้เป็นสิ่งเดียวกัน


2

ประเภทใน C เช่น Int Float, char ฯลฯ กำหนดข้อมูลที่สามารถดำเนินการด้วยวิธีการเฉพาะที่สามารถทำงานกับพวกเขา มันไม่ซับซ้อนกว่านั้น เช่นเดียวกับ int ฉันสามารถเพิ่มลบคูณและหารด้วยก็ได้ นี่คือวิธีการของฉัน (หรือการดำเนินการ) สำหรับ int Class เป็นคำจำกัดความของประเภทใหม่ ฉันจะกำหนดว่าข้อมูลจะเป็นอย่างไร อาจจะเป็นบิตเดียว อาจเป็นคำสองคำที่ซับซ้อนเหมือนจริงและเป็นจินตภาพ หรือบางทีมันอาจจะซับซ้อนด้วยขนาด 309734325 ไบต์ที่แสดงถึงการแต่งหน้าปรมาณูของอนุภาคแปลก ๆ บนดาวพฤหัส ฉันไม่สนใจ เช่นเดียวกับจำนวนเต็มฉันได้ทำการดำเนินการที่ฉันสามารถทำได้กับชนิดข้อมูลใหม่นี้ ในกรณีของจำนวนเต็มที่ฉันเพิ่มลบ ฯลฯ ด้วยชนิดข้อมูลใหม่นี้ฉันสามารถกำหนดการดำเนินการใด ๆ ที่ฉันคิดว่าเหมาะสม พวกเขาอาจจะเพิ่มการลบ ฯลฯ แต่พวกเขาอาจเพิ่มสิ่งอื่น ๆ นี่คือวิธีการใด ๆ ที่ฉันตัดสินใจเพิ่มในชั้นเรียนของฉัน

บรรทัดล่างคือด้วยประเภทใน C คุณมีคำจำกัดความของข้อมูลคืออะไร; byte, word, float, char เป็นต้น แต่สิ่งเหล่านี้แสดงถึงการดำเนินงานที่ถูกกฎหมายและจะให้ผลลัพธ์ที่น่าเชื่อถือ

คลาสไม่แตกต่างกันยกเว้นคุณขึ้นอยู่กับการกำหนดอินเทอร์เฟซและการทำงานที่ยอมรับได้ คลาสจะกำหนดสิ่งเหล่านี้และเมื่อคุณสร้างอินสแตนซ์ในวัตถุมันจะกำหนดพฤติกรรมของวัตถุเช่นเดียวกับการกำหนดประเภทที่กำหนดพฤติกรรมของจำนวนเต็มเมื่อคุณดำเนินการกับมัน

ชั้นเรียนให้ความยืดหยุ่นแก่คุณในการกำหนดประเภทใหม่และทุกอย่างเกี่ยวกับวิธีการใช้งาน

เมื่อสิ่งนี้ถูกกำหนดทุกครั้งที่ฉันสร้างอินสแตนซ์ของคลาส "thingy" มันมีโครงสร้างข้อมูลที่ฉันกำหนดและการดำเนินการ (วิธีการ) ที่ฉันบอกว่าคุณสามารถทำได้ คลาส "thingy" เห็นได้ชัดว่าไม่มีอะไรมากไปกว่าประเภทใหม่ที่ C ++ ให้ฉันกำหนด


1

ประเภทโดยทั่วไปหมายถึงการจัดประเภทของค่าดั้งเดิม - จำนวนเต็ม, สตริง, อาร์เรย์, บูลีน, โมฆะ ฯลฯ โดยปกติคุณจะไม่สามารถสร้างประเภทใหม่ได้

ชั้นหมายถึงชุดของคุณสมบัติและเมธอดที่มีการเชื่อมโยงกับวัตถุเมื่อมันถูกสร้างขึ้น โดยปกติคุณสามารถกำหนดคลาสใหม่ได้มากเท่าที่คุณต้องการแม้ว่าบางภาษาคุณจะต้องสร้างวัตถุใหม่แล้วแนบวิธีการเข้าด้วยกัน

คำจำกัดความนี้ส่วนใหญ่เป็นความจริง แต่บางภาษาได้พยายามรวมประเภทและคลาสเข้าด้วยกันในรูปแบบต่างๆพร้อมกับผลลัพธ์ที่เป็นประโยชน์


1
แม้กระทั่งภาษาที่ไม่มีตัวตนประเภท C คุณสามารถสร้างประเภทใหม่ได้ แต่มันก็ไม่มีอะไรเหมือนกับที่คนทั่วไปคิดว่าเป็นคลาสยกเว้นคลาส structs ระเบียนและคลาสที่คล้ายกันมาก
James Iry

1

ประเภทและคลาสมีความสัมพันธ์กัน แต่ไม่เหมือนกัน My take คือคลาสที่ใช้สำหรับการสืบทอดการใช้งานในขณะที่ชนิดจะถูกใช้สำหรับการทดแทนรันไทม์

นี่คือลิงค์อธิบายหลักการแทนที่และทำไม subclasses และ subtype ไม่เหมือนกันเสมอ (ใน Java เป็นตัวอย่าง) วิกิพีเดียหน้าแปรปรวนและ contravariance มีข้อมูลเพิ่มเติมเกี่ยวกับความแตกต่างนี้


1

ในภาษาไม่เชื่อเรื่องพระเจ้าทั่วไปรู้สึก - คลาสเป็นสำนึกของประเภท

บ่อยครั้งที่นี่เป็นเพียงการรับรู้ของประเภทนั้นคุณสามารถใช้คำทั้งสองเพื่ออ้างอิงในบางบริบท

ในทางตรงกันข้ามเช่นในบริบท C # - คลาสเป็นเพียงหนึ่งในการใช้งานอีกมากมาย ของแนวคิดประเภทเช่นดึกดำบรรพ์ structs พอยน์เตอร์ ฯลฯ


0

คำถามที่น่าสนใจ ฉันคิดว่าคำตอบของ aku นั้นตรงประเด็น ใช้ArrayListคลาสjava เป็นตัวอย่าง

public class ArrayList<E> extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable

อินสแตนซ์ของArrayListคลาสนั้นถูกกล่าวถึงว่าเป็นประเภทของทุก ๆ คลาสซูเปอร์ที่ขยายและทุกอินเตอร์เฟสที่ใช้ ดังนั้นอินสแตนซ์ของArrayListคลาสจะมีประเภทArrayList, RandomAccess, Cloneableและอื่น ๆ กล่าวอีกนัยหนึ่งค่า (หรืออินสแตนซ์) เป็นของประเภทหนึ่งประเภทขึ้นไปคลาสจะกำหนดประเภทเหล่านี้


0

คลาสที่ต่างกันอาจอธิบายชนิดเดียวกัน

ประเภทประกอบด้วยชิ้นส่วนเหล่านี้:

  1. การดำเนินงาน = ไวยากรณ์
  2. คำอธิบายของการดำเนินงาน = ความหมาย

ชั้นประกอบด้วยชิ้นส่วนเหล่านี้:

  1. การดำเนินงาน = ไวยากรณ์
  2. การนำไปใช้ (= การนำไปปฏิบัติต่าง ๆ อธิบายความหมายเดียวกัน)

หมายเหตุบางส่วน:

  • Interface (เช่นเดียวกับใน Java) ไม่ได้พิมพ์เพราะมันไม่ได้อธิบายความหมาย (อธิบายเพียงไวยากรณ์)

  • คลาสย่อยไม่ใช่ประเภทย่อยเนื่องจากคลาสย่อยอาจเปลี่ยนซีแมนทิกส์ที่กำหนดในซูเปอร์คลาสย่อยจึงไม่สามารถเปลี่ยนซีแมนทิกส์ซูเปอร์ไทป์ได้ (ดูหลักการการทดแทน Liskov เช่นตัวอย่าง LSP นี้ )


0

เห็นได้ชัดว่ามีภาษาที่มีระบบชนิดที่ไม่ใช่ภาษาการเขียนโปรแกรม OO ประเภทจะต้องเป็นแนวคิดที่กว้างกว่าชั้นเรียน

แม้แต่ในภาษาอย่าง Java intก็เป็นประเภท (ดั้งเดิม) แต่ไม่ใช่คลาส

ดังนั้น: ทุกชั้นเรียนเป็นประเภท แต่ไม่ใช่ทุกประเภทเป็นชั้นเรียน


0

หากเราคิดคำถามนี้ในบริบท C # เราจะไปถึงคำตอบที่ร้อง

ระบบประเภท C # แบ่งออกเป็นประเภทต่อไปนี้:

ประเภทค่า:

  • ประเภทที่เรียบง่าย: เช่น int, long, float, เป็นต้น
  • ประเภท Enum
  • ประเภทโครงสร้าง
  • ประเภทที่เป็นโมฆะ

ประเภทอ้างอิง:

  • ประเภทคลาส
  • ประเภทอินเตอร์เฟส
  • ประเภทอาเรย์
  • มอบหมายประเภท

อย่างที่คุณเห็นมีหลายประเภทใน C # ซึ่ง Class เป็นเพียงประเภทเดียว มีหมายเหตุสำคัญเพียงข้อเดียวคือระบบชนิดของ C # นั้นรวมเป็นหนึ่งเดียวกันซึ่งค่าประเภทใด ๆ สามารถถือว่าเป็นวัตถุได้ ทุกประเภทใน C # โดยตรงหรือโดยอ้อมมาจากประเภทวัตถุคลาสและวัตถุเป็นชั้นฐานสุดท้ายของทุกประเภท ค่าของประเภทการอ้างอิงจะถือว่าเป็นวัตถุเพียงแค่ดูค่าเป็นวัตถุชนิด ค่าของประเภทค่าจะถือว่าเป็นวัตถุโดยดำเนินการการชกมวยและการเลิกทำกล่อง

อย่างที่ฉันเห็นพิมพ์เป็นร่มของหลาย ๆ อย่างที่ชั้นเรียนเป็นหนึ่งในนั้น

ผู้อ้างอิง: เอกสารข้อมูลภาษา CSahrp, หน้า 4


-1

นี่เป็นคำถามที่ดีสำหรับฉันซึ่งทำให้ฉันคิดหนัก ฉันกล้าที่จะพูดว่า Class เป็นสิ่งคอมไพล์ไทม์และ Type เป็นสิ่งรันไทม์ ฉันพูดแบบนี้เพราะคุณเขียนชั้นเรียนไม่ได้ประเภท คอมไพเลอร์สร้างประเภทจากคลาสและรันไทม์ใช้ชนิดเพื่อสร้างอินสแตนซ์ของวัตถุ


1
ยินดีต้อนรับสู่ SO คำตอบนี้คล้ายกับอย่างน้อยหนึ่งคนและผู้ใช้ SO ต้องการภาษาทางเทคนิคมากกว่า 'thingy'!
Nick
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.