2014-03-13 63 views
0

我有一個名爲Cocpit的服務器和Protocl派生類的基類,然後我有Heartbeatsupervisorclass需要服務器和協議,並做一些工作無論如何,我有一些訪問Heartbeat內受保護成員的問題 - 我知道,因爲我試圖通過服務器對象訪問,而不是通過心跳,但如何根據我的整個代碼解決這個問題?訪問受保護的成員和屬性案例

CHANGED

public static bool IsConnectedToInternet() 
     { 

     Ping pingSender = new Ping(); 
     PingOptions options = new PingOptions(); 
     options.DontFragment = true; 
     // Create a buffer of 32 bytes of data to be transmitted. 
     string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 
     byte[] buffer = Encoding.ASCII.GetBytes(data); 
     int timeout = 120; 
     try 
     { 
      PingReply reply = pingSender.Send(HOST, timeout, buffer, options); 
      if (reply.Status == IPStatus.Success) 
      {    
      //Ping was successful 
      return true 
      } 
      else 

回答

3

畢竟如果想裏面Heartbeate使用我不能內部構造訪問protocol.Name - 如何訪問呢?

你不能,雖然它受到保護。 protected旨在訪問FooFoo(及派生類)類型的對象的受保護成員。

從部分中的C#5規範的3.5.3:

當受保護的實例成員,其中它被聲明的類的程序文本之外訪問,並且當受保護的內部實例構件被訪問在宣佈它的程序的程序文本之外,訪問必須在來自它所宣稱的類的派生類聲明內進行。此外,訪問需要通過派生類類型的實例或由它構造的類類型來實現。此限制可防止一個派生類訪問其他派生類的受保護成員,即使這些成員是從相同的基類繼承的。

這聽起來像你應該只是讓Name一個公共財產。目前還不清楚爲什麼這些都是虛擬的,請注意你......而且有些可以更簡潔地實現爲自動實現的屬性。

+0

Cocpit給出了名稱和Id派生clasess virtul,因爲從開始我不知道派生類是否需要做一些計算,所以它需要添加setter部署他們可以使用它或自己實現,如果需要做一些額外的setter中的值控制。我知道我不能這樣做,但我正在尋找方法如何重建這個應用程序工作作爲聽力不在Cocpit的繼承,並希望採取服務器和協議,並做一些計算如何改變這一切應該實現? – nighttrain

+0

@ nighttrain:這不太清楚你的意思,但你可以嘗試讓* getter * public,但有一個受保護的* setter *。 –

+0

我想要實現的是我的班級heartbeatsupervisor會使用服務器和協議,並將它們的值做一些計算,比如說: Server sr = new Server(「127.0.0.1」); 協議pr =新協議(「tcp」); 然後Heartbeatsupervisor會採取這兩個 並使用他們的值內的某種方法讓可以說做一個ping。 – nighttrain