【问题标题】:Can i access static property of base class, using object of derived class?我可以使用派生类的对象访问基类的静态属性吗?
【发布时间】:2013-05-22 20:34:21
【问题描述】:

我有多个层,其中有字段 UserToken ,我在整个会话中都需要它。我正在访问 WCF 服务,并且每个请求我都会在标头中传递一个 UserToken。而不是每次我在我的基类中设置 UserToken 时都传递这个标题,以便我从那个静态字段中获取令牌。我正在构建 WPF 应用程序。

    public class A  // Base layer
    {
        static string token;
    }
    public class B : A // First Level layer
    {

    }

    public Class Main : B  // Second level layer
    {
       //Here i want to do something like ...
       new B().[get base class of it i.e. A and then access static property of A]
    }

我需要这个,因为我的项目中有多个层,我不想将基础层引用到我的第二层?我怎样才能做到这一点?

【问题讨论】:

  • 公开你的静态字符串
  • f**k 我怎么忘了公开:(

标签: c# oop


【解决方案1】:

您可以将 A 中的静态属性声明为受保护,并且可以像访问任何静态属性一样从任何派生类访问它:

public class A  // Base layer
{
    protected static string token = "base class token";
}
public class B : A // First Level layer
{

}

public class Main : B  // Second level layer
{
   public string GetFromBase()
    {
        return A.token;
    }
}

只是一个简单的控制台示例:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(new Main().GetFromBase());
        Console.ReadKey();
    }
}

【讨论】:

    【解决方案2】:

    没有访问修饰符,您的变量是私有的。 如果您将令牌变量设为 public,那么您可以像这样访问它:

    public class A
    {
        public static string token;
    }
    
    // ...
    
    public class Main : B
    {
        public Main()
        {
            string token = A.token;
        }
    }
    

    【讨论】:

      【解决方案3】:

      首先,您需要将您的token 归档(或财产)设为公开或受保护,它现在是私有的。然后简单地做:

      public class Main : B  // Second level layer
      {
          // ...
          Console.WriteLine(B.token);
          // ...
      }
      

      您不需要类的实例来访问其静态字段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-10
        • 2014-12-05
        • 2014-03-13
        • 2017-01-16
        • 2015-05-23
        • 1970-01-01
        相关资源
        最近更新 更多