2011-05-12 37 views
6

我知道封裝的意思就像一個對象不應該直接訪問不同對象的成員......但我想它涉及到公共領域?我認爲公共方法不會破壞封裝..?我在這裏只是不清楚,會爲任何解釋而感到高興。封裝..幾乎可以精確描述?

回答

1

封裝並不意味着應該有沒有訪問成員。這意味着你應該只允許訪問應該使用的成員,基本上限制訪問而不是訪問。

通過公開某些東西,您允許訪問,通過將其設置爲私人而不允許訪問。

本文將進入更深入,以及各種訪問修飾符:

http://www.csharp-station.com/Tutorials/lesson19.aspx

在這篇文章中,他們給出一個很好的例子:

using System; 

class BankAccountProtected 
{ 
    public void CloseAccount() 
    { 
     ApplyPenalties(); 
     CalculateFinalInterest(); 
     DeleteAccountFromDB(); 
    } 

    protected virtual void ApplyPenalties() 
    { 
     // deduct from account 
    } 

    protected virtual void CalculateFinalInterest() 
    { 
     // add to account 
    } 

    protected virtual void DeleteAccountFromDB() 
    { 
     // send notification to data entry personnel 
    } 
} 

當一個程序員想要關閉一個他們不應該擔心進入​​的各個步驟:

  1. 個ApplyPenalties
  2. CalculateFinalInterest
  3. DeleteAccountFromDB

他們應該只是說,他們希望它關閉,並且將採取一切必要步驟。這就是爲什麼CloseAccount是公開的,其他的不是。

11

封裝是您通過驅動你的汽車:

  • 轉動點火鑰匙
  • 轉向輪
  • 改變齒輪(如果沒有自動)
  • 添加燃料

而不是:

  • 點燃燃料在汽缸
  • 摩擦-ING輪胎和地面
  • 等等...

暴露(使public)什麼和隱藏(使private)HOW。現在,你在封裝。

:)

1

我覺得最有幫助的思考就像人們用不同的工作類別。例如,如果我是項目經理,而且你是開發人員,那麼我與你的公共合同就是我將分配任務給你。我如何確定優先級?這是我私人的一個細節;你作爲一名開發人員並不需要知道你的工作。

因此,在考慮封裝時,將一個類的知識分爲公共契約及其實現細節。第一個應該被暴露 - 無論是通過公共財產,方法還是其他 - 而第二個應該被封裝在課堂內部,沒有辦法讓外人知道。

+0

呃,你(經理)正在向開發人員展示你的方法...是不是相反,這些東西應該工作? :) – 2011-05-13 12:43:30

1

封裝隱藏了對象實現的細節,因此在特定實現上沒有外部依賴關係。 拍下from msdn blog

看看這個CodeProject post