คำถามติดแท็ก access-modifiers

ตัวปรับการเข้าถึงเป็นแนวคิด OOP กำหนดระดับการเข้าถึงหรือการมองเห็นของคุณสมบัติ / วิธีการ / คลาสที่เฉพาะเจาะจง

28
ความแตกต่างระหว่าง public, protected, package-private และ private ใน Java คืออะไร?
ใน Java จะมีกฎระเบียบที่ชัดเจนในเวลาที่จะใช้ในแต่ละของการปรับเปลี่ยนการเข้าถึงคือค่าเริ่มต้น (แพคเกจเอกชน) public, protectedและprivateในขณะที่ทำให้classและinterfaceและการจัดการกับมรดก?

16
ใน C # อะไรคือความแตกต่างระหว่างสาธารณะส่วนตัวการป้องกันและไม่มีตัวปรับการเข้าถึง
ทุกปีที่วิทยาลัยของฉันฉันได้ใช้publicและต้องการที่จะทราบความแตกต่างระหว่างpublic, privateและprotected? นอกจากนี้สิ่งที่ไม่staticตรงข้ามกับการไม่มีอะไร?


22
การใช้งานจริงสำหรับคำหลัก“ ภายใน” ใน C #
คุณช่วยอธิบายการใช้งานจริงสำหรับinternalคำหลักใน C # ได้ไหม? ฉันรู้ว่าinternalตัวดัดแปลง จำกัด การเข้าถึงแอสเซมบลีปัจจุบัน แต่เมื่อใดและในสถานการณ์ใดที่ฉันควรใช้



17
Swift มีตัวดัดแปลงการเข้าถึงหรือไม่
ใน Objective-C ข้อมูลเช่นสามารถpublic, หรือprotected privateตัวอย่างเช่น: @interface Foo : NSObject { @public int x; @protected: int y; @private: int z; } -(int) apple; -(int) pear; -(int) banana; @end ฉันไม่พบการกล่าวถึงตัวดัดแปลงการเข้าถึงในการอ้างอิง Swift เป็นไปได้หรือไม่ที่จะ จำกัด การเปิดเผยข้อมูลใน Swift?

16
มีเหตุผลใดที่จะใช้คุณสมบัติส่วนตัวใน C # หรือไม่
ฉันเพิ่งรู้ว่าการสร้างคุณสมบัติ C # สามารถใช้กับโมดิฟายเออร์ส่วนตัวได้ : private string Password { get; set; } แม้ว่านี่จะเป็นที่น่าสนใจในทางเทคนิค, ฉันไม่สามารถจินตนาการเมื่อผมจะใช้มันตั้งแต่ข้อมูลส่วนตัวที่เกี่ยวข้องกับการแม้กระทั่งพิธีน้อย : private string _password; และฉันไม่สามารถจินตนาการได้ว่าเมื่อใดที่ฉันจะต้องได้รับภายในแต่ไม่ได้ตั้งค่าหรือตั้งค่าแต่ไม่ได้รับข้อมูลส่วนตัว: private string Password { get; } หรือ private string Password { set; } แต่อาจจะมีกรณีการใช้งานกับคลาสที่ซ้อนกัน / สืบทอดหรืออาจเป็นที่ / ชุด / อาจมีตรรกะแทนเพียงแค่คืนค่าของคุณสมบัติแม้ว่าฉันจะมีแนวโน้มที่จะรักษาคุณสมบัติที่เรียบง่ายอย่างเคร่งครัดและให้วิธีการที่ชัดเจนทำตรรกะใด ๆ GetEncodedPassword()เช่น ไม่มีใครใช้คุณสมบัติส่วนตัวใน C # ด้วยเหตุผลใดก็ตามหรือเป็นเพียงหนึ่งในโครงสร้างทางเทคนิคที่เป็นไปได้ แต่ไม่ค่อยมีคนใช้จริง ภาคผนวก คำตอบที่ดีอ่านผ่านพวกเขาฉันคัดการใช้งานเหล่านี้สำหรับคุณสมบัติส่วนตัว: เมื่อฟิลด์ส่วนตัวจำเป็นต้องโหลดอย่างเกียจคร้าน เมื่อเขตข้อมูลส่วนตัวต้องการตรรกะเพิ่มเติมหรือเป็นค่าที่คำนวณได้ …

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

5
Java มีตัวดัดแปลงการเข้าถึง "ส่วนตัวที่ได้รับการป้องกัน" หรือไม่?
ฉันเห็นการอ้างอิงบางอย่างอ้างถึงตัวดัดแปลงการเข้าถึงใน Java ที่เรียกว่าprivate protected(ทั้งสองคำพร้อมกัน): private protected someMethod() { } หนึ่งของหน้าเว็บที่ผมพบว่าหมายถึงนี้ก็คือที่นี่ บทเรียนโรงเรียนของฉันยังอ้างถึงตัวดัดแปลงการเข้าถึงนี้ (และบอกว่ามีอยู่) อย่างไรก็ตามการใช้มันส่งผลให้เกิดข้อผิดพลาดในภาษา Java ฉันลองทั้งตัวแปรและวิธีการและฉันค่อนข้างแน่ใจว่ามันไม่มีอยู่จริง แต่ฉันต้องการคำอธิบายว่าเกิดอะไรขึ้น มันถูกพิจารณาแล้วถูกปฏิเสธ? หรือมันถูกลบออกใน Java เวอร์ชันใหม่กว่า? แก้ไข: ฉันไม่ต้องการข้อมูลเกี่ยวกับprotectedคำหลัก

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

2
เหตุใด typescript จึงใช้คีย์เวิร์ด“ export” เพื่อทำให้คลาสและอินเทอร์เฟซเป็นสาธารณะ
ในขณะที่ขลุกอยู่กับ typescript ฉันพบว่าคลาสของฉันภายในโมดูล (ใช้เป็นเนมสเปซ) ไม่สามารถใช้ได้กับคลาสอื่นเว้นแต่ฉันจะเขียนexportคีย์เวิร์ดก่อนหน้านั้นเช่น module some.namespace.here { export class SomeClass{..} } ตอนนี้ฉันสามารถใช้รหัสด้านบนดังนี้: var someVar = new some.namespace.here.SomeClass(); อย่างไรก็ตามฉันแค่สงสัยว่าเหตุใดจึงใช้คำหลักนี้ตรงข้ามกับการใช้publicคำหลักที่ใช้ในระดับวิธีการเพื่อแสดงว่าวิธีการหรือคุณสมบัติควรสามารถเข้าถึงได้จากภายนอก ทำไมไม่ใช้กลไกเดียวกันนี้เพื่อทำให้คลาสและอินเทอร์เฟซอื่น ๆ มองเห็นได้จากภายนอก? สิ่งนี้จะให้รหัสผลลัพธ์เช่น: module some.namespace.here { public class SomeClass{..} }

6
อะไรคือความหมายของตัวปรับการเข้าถึง C # ที่วางแผนไว้
ในฐานะที่เป็นส่วนหนึ่งของเอกสารRoslynบน GitHub มีหน้าที่เรียกว่าสถานะการใช้งานคุณลักษณะภาษาพร้อมด้วยคุณลักษณะภาษาที่วางแผนไว้สำหรับ C # และ VB คุณลักษณะหนึ่งที่ฉันไม่สามารถคาดเดาได้คือprivate protectedตัวปรับการเข้าถึง: private protected string GetId() { … } นอกจากนี้ยังมีหน้าหมายเหตุการออกแบบภาษา C #ซึ่งอธิบายถึงคุณลักษณะใหม่ ๆ มากมาย แต่ไม่ใช่คุณลักษณะนี้ Eric Lippert กล่าวในความคิดเห็น : ข้อผิดพลาดของคุณคือการคิดว่าตัวดัดแปลงเป็นการเพิ่มข้อ จำกัด ในความเป็นจริงตัวปรับลดข้อ จำกัด เสมอ โปรดจำไว้ว่าสิ่งต่างๆเป็น "ส่วนตัว" โดยค่าเริ่มต้น การเพิ่มโมดิฟายเออร์เท่านั้นที่จะทำให้มีข้อ จำกัด น้อยลง ความหมายของprivate protectedอะไร? ฉันจะใช้เมื่อใด

7
คลาส“ ส่วนตัว” (การนำไปใช้งาน) ใน Python
ฉันกำลังเขียนโค้ดโมดูล Python ขนาดเล็กซึ่งประกอบด้วยสองส่วน: ฟังก์ชันบางอย่างที่กำหนดอินเทอร์เฟซสาธารณะ คลาสการใช้งานที่ใช้โดยฟังก์ชันข้างต้น แต่ไม่มีความหมายภายนอกโมดูล ในตอนแรกฉันตัดสินใจที่จะ "ซ่อน" คลาสการนำไปใช้งานนี้โดยกำหนดไว้ในฟังก์ชันโดยใช้มัน แต่สิ่งนี้ขัดขวางความสามารถในการอ่านและไม่สามารถใช้ได้หากฟังก์ชันหลายฟังก์ชันใช้คลาสเดียวกันซ้ำ ดังนั้นนอกจากความคิดเห็นและ docstrings แล้วยังมีกลไกในการทำเครื่องหมายชั้นเรียนเป็น "ส่วนตัว" หรือ "ภายใน" หรือไม่? ฉันทราบถึงกลไกขีดล่าง แต่ตามที่ฉันเข้าใจมันใช้กับตัวแปรฟังก์ชันและชื่อวิธีการเท่านั้น

9
เหตุผลใดที่ต้องเขียนคีย์เวิร์ด "ส่วนตัว" ใน C #
เท่าที่ผมรู้ว่าprivateเป็นค่าเริ่มต้นทุกที่ใน C # (หมายถึงว่าถ้าผมไม่ได้เขียนpublic, protected, internalฯลฯ มันจะเป็นprivateค่าเริ่มต้น) (กรุณาแก้ไขฉันถ้าฉันผิด) แล้วเหตุผลที่ต้องเขียนคีย์เวิร์ดนั้นคืออะไรหรือทำไมถึงมีไว้สำหรับสมาชิก? ตัวอย่างเช่นเมื่อตัวจัดการเหตุการณ์สร้างขึ้นโดยอัตโนมัติจะมีลักษณะดังนี้: private void RatTrap_MouseEnter(object sender, CheeseEventArgs e) { } แต่ทำไมมันถึงเขียนว่าเป็นส่วนตัวถ้าเป็นนัยและเป็นค่าเริ่มต้น? เพียงเพื่อให้นักพัฒนามือใหม่ (ที่ไม่รู้ว่าเป็นค่าเริ่มต้น C #) รู้ว่ามันเป็นส่วนตัว? หรือคอมไพเลอร์มีความแตกต่างกันอย่างไร นอกจากนี้ยังมีกรณีที่การเขียน "ส่วนตัว" (คนเดียว) จะเปลี่ยนการเข้าถึงของสมาชิกหรือไม่?

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