คำถามติดแท็ก private

ไพรเวตเป็นวิธีการห่อหุ้มในการเขียนโปรแกรมเชิงวัตถุ

22
ตัวสร้างแบบคงที่ใน C ++? ฉันต้องเริ่มต้นวัตถุคงที่ส่วนตัว
ฉันต้องการคลาสที่มีสมาชิกข้อมูลสแตติกส่วนตัว (เวกเตอร์ที่มีอักขระ az ทั้งหมด) ใน java หรือ C # ฉันสามารถสร้าง "static constructor" ที่จะทำงานก่อนที่ฉันจะสร้างอินสแตนซ์ของคลาสและตั้งค่าสมาชิกข้อมูลคงที่ของคลาส มันถูกเรียกใช้เพียงครั้งเดียว (เนื่องจากตัวแปรถูกอ่านอย่างเดียวและจำเป็นต้องตั้งค่าเพียงครั้งเดียว) และเนื่องจากเป็นฟังก์ชันของคลาสจึงสามารถเข้าถึงสมาชิกส่วนตัวได้ ฉันสามารถเพิ่มโค้ดใน Constructor ที่ตรวจสอบเพื่อดูว่าเวกเตอร์เริ่มต้นได้หรือไม่และเริ่มต้นถ้าไม่ใช่ แต่แนะนำการตรวจสอบที่จำเป็นมากมายและดูเหมือนจะไม่เป็นทางออกที่ดีที่สุดสำหรับปัญหา ความคิดเกิดขึ้นกับฉันว่าเนื่องจากตัวแปรจะอ่านได้อย่างเดียวพวกเขาสามารถเป็น const คงที่แบบสาธารณะดังนั้นฉันจึงสามารถตั้งค่าพวกเขาอีกครั้งนอกชั้นเรียน แต่อีกครั้งดูเหมือนว่าแฮ็คที่น่าเกลียด เป็นไปได้หรือไม่ที่จะมีสมาชิกข้อมูลสแตติกส่วนตัวในชั้นเรียนหากฉันไม่ต้องการเริ่มต้นพวกเขาใน Constructor อินสแตนซ์?

19
การใช้ตัวแปรแบบคงที่ส่วนตัวใน Java คืออะไร?
ถ้าตัวแปรถูกประกาศเป็นแล้วผมสามารถเข้าถึงได้จากทุกที่public static varName; ClassName.varNameฉันยังทราบว่าสมาชิกแบบคงที่จะถูกใช้ร่วมกันโดยอินสแตนซ์ทั้งหมดของคลาสและไม่ได้ถูกจัดสรรใหม่ในแต่ละอินสแตนซ์ การประกาศตัวแปรprivate static varName;แตกต่างจากการประกาศตัวแปรprivate varName;หรือไม่? ในทั้งสองกรณีมันไม่สามารถเข้าถึงได้เป็นClassName.varNameหรือเป็นClassInstance.varNameจากชั้นอื่น ๆ การประกาศตัวแปรเป็นแบบสแตติกให้คุณสมบัติพิเศษอื่น ๆ หรือไม่

7
มีวิธีใดบ้างที่จะเรียกใช้วิธีการส่วนตัว
ฉันมีคลาสที่ใช้ XML และการสะท้อนเพื่อส่งคืนObjects ไปยังคลาสอื่น โดยปกติวัตถุเหล่านี้เป็นฟิลด์ย่อยของวัตถุภายนอก แต่บางครั้งมันเป็นสิ่งที่ฉันต้องการสร้างได้ทันที ฉันลองอะไรแบบนี้ แต่ก็ไม่มีประโยชน์ ฉันเชื่อว่าเป็นเพราะ Java ไม่อนุญาตให้คุณเข้าถึงprivateวิธีการไตร่ตรอง Element node = outerNode.item(0); String methodName = node.getAttribute("method"); String objectName = node.getAttribute("object"); if ("SomeObject".equals(objectName)) object = someObject; else object = this; method = object.getClass().getMethod(methodName, (Class[]) null); หากวิธีการที่ให้มันล้มเหลวด้วยprivate NoSuchMethodExceptionฉันสามารถแก้มันได้โดยการทำวิธีpublicหรือทำให้คลาสอื่นได้มาจาก เรื่องสั้นสั้นฉันแค่สงสัยว่ามีวิธีการเข้าถึงprivateวิธีการสะท้อน
146 java  reflection  private 

3
ประกาศเพื่อนใน C ++ - ความแตกต่างระหว่างสาธารณะและส่วนตัว
มีความแตกต่างระหว่างการประกาศฟังก์ชั่นเพื่อน / ชั้นเป็นส่วนตัวหรือสาธารณะ? ฉันดูเหมือนจะไม่พบอะไรเกี่ยวกับเรื่องนี้ทางออนไลน์ ฉันหมายถึงความแตกต่างระหว่าง: class A { public: friend class B; }; และ class A { private: //or nothing as the default is private friend class B; }; มีความแตกต่างหรือไม่?
144 c++  private  friend  public 

10
เป็นตัวอย่างที่ดีในการแยกความแตกต่างระหว่าง fileprivate และ private ใน Swift3
นี้บทความได้รับประโยชน์ในการทำความเข้าใจ specifiers Swift 3เข้าถึงใหม่ใน นอกจากนี้ยังให้ตัวอย่างบางส่วนของการใช้งานที่แตกต่างกันและfileprivateprivate คำถามของฉันคือ - ไม่ได้ใช้fileprivateกับฟังก์ชั่นที่จะใช้เฉพาะในไฟล์นี้เหมือนกับที่ใช้privateหรือไม่

16
วิธีใดที่ดีที่สุดในการทดสอบหน่วยการป้องกันและวิธีการส่วนตัวใน Ruby
วิธีใดที่ดีที่สุดในการทดสอบหน่วยที่มีการป้องกันและวิธีการส่วนตัวใน Ruby โดยใช้Test::Unitกรอบมาตรฐาน Ruby ฉันแน่ใจว่าจะมีใครสักคนพูดขึ้นและยืนยันโดยดันทุรังว่า "คุณควรทดสอบเฉพาะวิธีการสาธารณะเท่านั้นหากจำเป็นต้องมีการทดสอบหน่วยก็ไม่ควรเป็นวิธีการป้องกันหรือเป็นส่วนตัว" แต่ฉันไม่ได้สนใจที่จะถกเถียงเรื่องนี้จริงๆ ฉันมีวิธีการหลายอย่างที่ได้รับการป้องกันหรือเป็นส่วนตัวด้วยเหตุผลที่ดีและถูกต้องวิธีการส่วนตัว / การป้องกันเหล่านี้มีความซับซ้อนพอสมควรและวิธีการสาธารณะในชั้นเรียนขึ้นอยู่กับวิธีการป้องกัน / ส่วนตัวเหล่านี้ที่ทำงานได้อย่างถูกต้องดังนั้นฉันจึงต้องการวิธีทดสอบ วิธีการป้องกัน / ส่วนตัว อีกอย่าง ... โดยทั่วไปฉันจะใส่วิธีการทั้งหมดสำหรับคลาสที่กำหนดไว้ในไฟล์เดียวและหน่วยทดสอบสำหรับคลาสนั้นในไฟล์อื่น ตามหลักการแล้วฉันต้องการให้เวทมนตร์ทั้งหมดใช้ฟังก์ชัน "การทดสอบหน่วยของวิธีการป้องกันและวิธีการส่วนตัว" นี้ในไฟล์ทดสอบหน่วยไม่ใช่ไฟล์ต้นฉบับหลักเพื่อให้ไฟล์ต้นฉบับหลักเรียบง่ายและตรงไปตรงมาที่สุด

9
การทดสอบหน่วยของฟังก์ชันส่วนตัวด้วยมอคค่าและโหนด js
ฉันใช้มอคค่าเพื่อทดสอบหน่วยแอปพลิเคชันที่เขียนขึ้นสำหรับ node.js ฉันสงสัยว่าเป็นไปได้ไหมที่จะใช้ฟังก์ชันทดสอบหน่วยที่ยังไม่ได้ส่งออกในโมดูล ตัวอย่าง: ฉันมีฟังก์ชันมากมายที่กำหนดไว้เช่นนี้ใน foobar.js function private_foobar1(){ ... } function private_foobar2(){ ... } และฟังก์ชันบางอย่างที่ส่งออกเป็นสาธารณะ: exports.public_foobar3 = function(){ ... } กรณีทดสอบมีโครงสร้างดังนี้: describe("private_foobar1", function() { it("should do stuff", function(done) { var stuff = foobar.private_foobar1(filter); should(stuff).be.ok; should(stuff)..... เห็นได้ชัดว่าสิ่งนี้ใช้ไม่ได้เนื่องจากprivate_foobar1ไม่มีการส่งออก วิธีที่ถูกต้องในการทดสอบหน่วยส่วนตัวคืออะไร? มอคค่ามีวิธีการในตัวสำหรับการทำเช่นนั้นหรือไม่?

5
เป็นไปได้ไหมที่จะตั้งค่าคุณสมบัติส่วนตัวผ่านการสะท้อน?
ฉันสามารถตั้งค่าคุณสมบัติส่วนตัวผ่านการสะท้อนแสงได้หรือไม่? public abstract class Entity { private int _id; private DateTime? _createdOn; public virtual T Id { get { return _id; } private set { ChangePropertyAndNotify(ref _id, value, x => Id); } } public virtual DateTime? CreatedOn { get { return _createdOn; } private set { ChangePropertyAndNotify(ref _createdOn, value, x …

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

2
เหตุใด "private val" และ "private final val" จึงแตกต่างกัน
ฉันเคยคิดแบบนั้นprivate valและprivate final valเหมือนกันจนกระทั่งฉันเห็นหัวข้อ 4.1 ใน Scala Reference: นิยามค่าคงที่เป็นรูปแบบ final val x = e โดยที่ e คือนิพจน์คงที่ (§6.24) ต้องมีตัวปรับแต่งขั้นสุดท้ายและไม่สามารถระบุคำอธิบายประกอบประเภทได้ การอ้างอิงถึงค่าคงที่ x ถือว่าเป็นนิพจน์คงที่ ในโค้ดที่สร้างขึ้นจะถูกแทนที่ด้วย e ด้านขวามือของนิยาม และฉันได้เขียนแบบทดสอบ: class PrivateVal { private val privateVal = 0 def testPrivateVal = privateVal private final val privateFinalVal = 1 def testPrivateFinalVal = privateFinalVal } javap …
101 scala  private  final 

10
คุณสมบัติอ่านอย่างเดียวของ Python
ฉันไม่รู้ว่าแอตทริบิวต์ควรเป็นส่วนตัวเมื่อใดและควรใช้คุณสมบัติหรือไม่ ฉันอ่านเมื่อเร็ว ๆ นี้ว่า setters และ getters ไม่ใช่ pythonic และฉันควรใช้ property decorator ไม่เป็นไร. แต่ถ้าฉันมีแอตทริบิวต์จะต้องไม่ถูกตั้งค่าจากภายนอกชั้นเรียน แต่สามารถอ่านได้ (แอตทริบิวต์แบบอ่านอย่างเดียว) แอตทริบิวต์นี้ควรเป็นแบบส่วนตัวหรือไม่และโดยส่วนตัวฉันหมายถึงด้วยเครื่องหมายขีดล่างเช่นนั้นself._xหรือไม่ ถ้าใช่แล้วจะอ่านโดยไม่ใช้ getter ได้อย่างไร? วิธีเดียวที่ฉันรู้ตอนนี้คือการเขียน @property def x(self): return self._x ด้วยวิธีนี้ฉันสามารถอ่านแอตทริบิวต์ได้obj.xแต่ฉันไม่สามารถตั้งค่าได้obj.x = 1จึงไม่เป็นไร แต่ฉันควรสนใจเกี่ยวกับการตั้งค่าวัตถุที่ไม่ต้องตั้งค่าหรือไม่? บางทีฉันควรจะปล่อยมันไป แต่แล้วอีกครั้งฉันไม่สามารถใช้ขีดล่างได้เนื่องจากการอ่านobj._xเป็นเลขคี่สำหรับผู้ใช้ดังนั้นฉันจึงควรใช้obj.xอีกครั้งผู้ใช้ไม่รู้ว่าเขาต้องไม่ตั้งค่าคุณลักษณะนี้ ความคิดเห็นและการปฏิบัติของคุณคืออะไร?

7
วิธีส่วนตัวปลอดภัยจริงหรือ?
ใน Java privateตัวปรับการเข้าถึงถือว่าปลอดภัยเนื่องจากมองไม่เห็นภายนอกคลาส แล้วโลกภายนอกก็ไม่รู้เกี่ยวกับวิธีการนั้นเช่นกัน แต่ฉันคิดว่าการสะท้อนของ Java สามารถใช้เพื่อทำลายกฎนี้ได้ พิจารณากรณีต่อไปนี้: public class ProtectedPrivacy{ private String getInfo(){ return "confidential"; } } จากคลาสอื่นฉันจะได้รับข้อมูล: public class BreakPrivacy{ public static void main(String[] args) throws Exception { ProtectedPrivacy protectedPrivacy = new ProtectedPrivacy(); Method method = protectedPrivacy.getClass().getDeclaredMethod("getInfo", null); method.setAccessible(true); Object result = method.invoke(protectedPrivacy); System.out.println(result.toString()); } } ในขณะนี้ฉันคิดว่าวิธีการส่วนตัวยังปลอดภัยเนื่องจากจะทำบางสิ่งเช่นข้างต้นเราต้องรู้ชื่อวิธีการ แต่ถ้าคลาสที่มีเมธอดส่วนตัวที่เขียนโดยคนอื่นเราไม่สามารถมองเห็นได้ …

6
เมื่อใดควรใช้ @objc ใน Swift
ใน Swift ฉันเห็นวิธีการบางอย่างเช่น: @objc private func doubleTapGestureRecognized(recognizer: UITapGestureRecognizer) ฉันสงสัยว่าเมื่อใดควรใช้ @objc? ฉันอ่านเอกสารบางฉบับ แต่พวกเขากำลังบอกว่าเมื่อคุณต้องการให้เรียกได้ใน Objective-C คุณควรเพิ่มแฟล็ก @objc อย่างไรก็ตามนี่เป็นฟังก์ชั่นส่วนตัวใน Swift @obj ทำอะไร?

5
เหตุใดฉันจึงเข้าถึงตัวแปรส่วนตัวในตัวสร้างการคัดลอกได้
ฉันได้เรียนรู้ว่าฉันไม่สามารถเข้าถึงตัวแปรส่วนตัวได้โดยใช้ get-function ในคลาสเท่านั้น แต่ทำไมฉันถึงเข้าถึงได้ในตัวสร้างสำเนา ตัวอย่าง: Field::Field(const Field& f) { pFirst = new T[f.capacity()]; pLast = pFirst + (f.pLast - f.pFirst); pEnd = pFirst + (f.pEnd - f.pFirst); std::copy(f.pFirst, f.pLast, pFirst); } คำประกาศของฉัน: private: T *pFirst,*pLast,*pEnd;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.