การมองเห็นเริ่มต้นสำหรับคลาส C และสมาชิก (ฟิลด์วิธีการ ฯลฯ )


164

ฉันพยายามค้นหาข้อมูลอ้างอิงสำหรับการมองเห็นเริ่มต้นของแง่มุมต่าง ๆ ของ C # ประเภทคลาสฟิลด์วิธีการ enums ฯลฯ

ใครสามารถให้รายชื่อของสิ่งเหล่านี้พร้อมกับการมองเห็นเริ่มต้นของพวกเขา (เช่นไม่มีการปรับเปลี่ยนคำนำหน้า)?



8
ฉันไม่คิดว่ามันจะซ้ำกัน ... คำถามนั้นมีความเฉพาะเจาะจง (ค่าเริ่มต้นสำหรับสิ่งนี้คืออะไร) คำถามนี้กว้าง (ค่าเริ่มต้นทั้งหมดคืออะไร)
WernerCD

คำตอบ:


266

ข้อมูลทั้งหมดที่คุณต้องการสามารถพบได้ที่นี่และที่นี่ (ขอบคุณReed Copsey ):

จากลิงค์แรก:

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

...

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

...

อินเทอร์เฟซเริ่มต้นการเข้าถึงภายใน

...

ผู้รับมอบสิทธิ์ประพฤติเช่นคลาสและ structs โดยค่าเริ่มต้นที่พวกเขามีการเข้าถึงภายในเมื่อประกาศโดยตรงภายใน namespace และเข้าถึงความเป็นส่วนตัวเมื่อซ้อนกัน


จากลิงค์ที่สอง:

ประเภทระดับบนสุดซึ่งไม่ได้ซ้อนอยู่ในประเภทอื่นสามารถมีได้เฉพาะการเข้าถึงภายในหรือสาธารณะ เข้าถึงเริ่มต้นสำหรับประเภทนี้คือภายใน

และสำหรับประเภทซ้อนกัน:

สมาชิกของการเข้าถึงสมาชิกเริ่มต้น
---------- ----------------------------
ระบุสาธารณะ
คลาสส่วนตัว
อินเตอร์เฟสสาธารณะ
struct แบบส่วนตัว

6
การรวบรวมที่ดีจากข้อมูลของ Reed แต่คุณลืมระบุว่าตัวดัดแปลงการเข้าถึงดังกล่าวใช้กับวิธีการเช่นกัน
Joel

4
@Joel คุณหมายถึงอะไร เขาระบุชัดเจนว่า "สมาชิก" สมาชิกเป็นข้อมูลและพฤติกรรมและรวมถึงวิธีการ
rism

ในกรณีที่นักพัฒนา vb.net คนใดดูสิ่งนี้ vb จะแตกต่างกัน ขอบเขตเริ่มต้นสำหรับสมาชิกระดับ VB Publicคือ Enumสมาชิกก็เช่นPublicกัน อาจสับสนน้อยกว่าเพียงแค่ใช้ขอบเขตที่ชัดเจนในกรณีของคุณเนื่องจากโอกาสสูงจะถูกแปลหรืออ่านโดยนักพัฒนา c # ในบางจุด การสร้างรหัสใน vb.net ไม่ได้ทำเพื่อคุณ
toddmo

ฉันจะเพิ่มว่าอินเทอร์เฟซที่ซ้อนกันภายในคลาสเป็นส่วนตัวไม่ใช่ภายในโดยค่าเริ่มต้น
Frank Bryce

13

จาก MSDN:

ประเภทระดับบนสุดซึ่งไม่ได้ซ้อนอยู่ในประเภทอื่นสามารถมีinternalหรือpublicเข้าถึงได้เท่านั้น internalการเข้าถึงเริ่มต้นสำหรับประเภทนี้คือ


ประเภทที่ซ้อนกันซึ่งเป็นสมาชิกประเภทอื่นสามารถประกาศความสามารถในการเข้าถึงตามที่ระบุในตารางต่อไปนี้

ค่าเริ่มต้นการเข้าถึงของสมาชิกที่ซ้อนกัน & ตัวดัดแปลงการช่วยการเข้าถึง

ที่มา: ระดับการเข้าถึง (C # อ้างอิง) (6 ธันวาคมTH 2017)


9

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


19
ข้อมูลนี้มีอยู่แล้วในคำตอบอื่น ๆ คุณควรตอบคำถามโดยเฉพาะคำถามเก่า ๆ เช่นนี้เมื่อคุณมีข้อมูลเพิ่มเติมที่จะให้หรือคุณคิดว่าคำตอบอื่น ๆ นั้นผิด อย่างไรก็ตามยินดีต้อนรับสู่ Stack Overflow
Gorpik

ชั้นไม่จำเป็นต้องเปิดเผยต่อสาธารณะเพื่อให้สามารถเข้าถึงได้โดยส่วนประกอบอื่น ๆ หนึ่งสามารถใช้ชั้น InternalsVisibleToAttribute[assembly:InternalsVisibleTo("Friend1b")]
adam

0

privateโดยค่าเริ่มต้นคือ internalเว้นแต่พวกเขากำลังซ้อนกันเป็นชั้นเรียน


1
ค่าเริ่มต้นไม่ได้เป็นค่าสาธารณะหรือไม่
Ryan Peters

4
@Jay: หากพวกเขาไม่ซ้อนกัน @Ryan: ไม่, enums ที่ไม่ซ้อนกันอยู่ภายในโดยค่าเริ่มต้น
Jon Skeet

2
@Ryan: สมาชิก Enum เป็นแบบสาธารณะโดยค่าเริ่มต้น แต่ Enum นั้นเป็นแบบภายใน
Reed Copsey

@ReedCopsey enum members are private by default, so to use them outside the enum we should declare them as publicแต่หนังสือที่ฉันเรียนรู้จากการได้อย่างชัดเจนกล่าวว่า คุณช่วยอธิบายได้ไหมว่าทำไมหนังสือเล่มนี้ถึงขัดแย้งกับสิ่งที่คุณพูด? ขอบคุณ

สิ่งที่ book @ user5794376 (เห็นได้ชัดว่าบัญชีที่ถูกลบ) คือการอ่านควรได้รับความคิดเห็นระดับ 1 ดาวทั้งหมดหากสิ่งที่พวกเขาพูดอยู่ในหนังสือเล่มนี้เป็นความจริง ใช้เวลาเพียงดูที่ Microsoft เอกสารเพื่อทราบว่าสมาชิก enum เป็นแบบสาธารณะโดยค่าเริ่มต้นและเป็นสาเหตุที่เป็นเรื่องปกติสำหรับ enums เท่านั้นที่จะไม่ชัดเจน
Rodney S. Foley
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.