可以使用派生类的对象访问基类的静态属性吗?

本文关键字:静态 属性 基类 对象 派生 可以使 访问 | 更新日期: 2023-09-27 18:14:44

我有多个图层,其中我有字段UserToken,我需要整个会话。我正在击中WCF服务,并且每个请求我都在header中传递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]
    }

我需要这个,因为我在我的项目中有多个图层,我不想参考基础层到我的第二层?

可以使用派生类的对象访问基类的静态属性吗?

您可以将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();
    }
}

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

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

首先,您需要使您的token文件(或属性)公开或受保护,它现在是私有的。然后简单地执行:

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

你不需要一个类的实例来访问它的静态字段