访问受保护的成员和属性案例

时间:2014-03-13 09:43:21

标签: c# oop

我有一个名为Cocpit for Server和Protocl派生类的基类然后我有Heartbeatsupervisorclass,它将采用服务器和协议并做一些工作无论如何我在Heartbeat内访问受保护成员时遇到了一些问题 - 我知道因为我试图通过Server对象访问而不是心跳,但如何根据我的整个代码解决该问题?

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 

1 个答案:

答案 0 :(得分:3)

  

毕竟当想在Heartbeate中使用时我无法访问protocol.Name里面的构造函数 - 如何访问它?

你不能,虽然它受到保护。 protected旨在提供对FooFoo(及派生类)类型的对象的受保护成员的访问权限。

来自C#5规范的第3.5.3节:

  

当在声明它的类的程序文本之外访问受保护的实例成员时,并且当在声明它的程序的程序文本之外访问受保护的内部实例成员时,必须进行访问在一个类声明中,该声明派生自声明它的类。此外,需要通过该派生类类型的实例或从其构造的类类型进行访问。此限制可防止一个派生类访问其他派生类的受保护成员,即使成员是从同一基类继承的。

听起来你应该把Name作为公共财产。目前尚不清楚为什么这些都是虚拟的,请注意......有些可以更简洁地实现为自动实现的属性。