调用静态变量

本文关键字:变量 静态 调用 | 更新日期: 2023-09-27 18:33:57

非常简单明了。我创建了 2 个类:头等舱。在此,我声明了一个静态变量,以便能够在其他类中访问它而无需初始化。

protected class TCHome
{
   protected static String write = "blablabla";
}

第二类:

public class Home
{
   TCHome.write - //write does not come up to be accessible at all.;
}

所期望的是,我应该能够直接调用变量 - "write",但它根本没有出现。正确的方法是什么?请。

调用静态变量

protected表示类型或成员只能由同一类或结构中的代码访问,或者只能由派生自该类的类中的代码访问。

你应该让它publicinternal.

  • public:类型或成员可以通过 同一程序集或引用它的另一个程序集。
  • 私有:类型 或 成员只能由同一类或结构中的代码访问。
  • 受保护:类型或成员只能通过同一代码访问 类或结构,或派生自该类的类中。
  • internal:类型或成员可由同一中的任何代码访问 程序集,但不是来自另一个程序集。
  • 受保护的内部:类型或成员可由 中的任何代码访问 在其中声明它的程序集,或从派生类中声明的程序集 在另一个程序集中。必须从另一个程序集进行访问 在派生自类的类声明中,其中 声明受保护的内部元素,并且必须通过 派生类类型的实例。

参考

如果适合您的需求,还可以考虑使用常量

protected class TCHome
{
   public const string Write = "blablabla";
}

或者使其成为属性,具有公共可访问字段不是一个好方法。

protected class TCHome
{
   public static string Write { get; set; } //maybe private set;
   static { Write = "blablabla"; } //this is called static constructor
 }

或只读字符串

protected class TCHome
{
   public static readonly string Write = "blablabla";
}

访问修饰符应该是公开的,如下所示

public class TCHome
{
   public static String write = "blablabla";
}     

你已经把保护写了,必须有子类。

使用public

public static String write = "blablabla";

继承家庭类中的 tchome。 或将 tchome 从受保护更改为公共。

您有两个选择:

要么

让你的变量公开(不建议这样做,因为公共字段不好,最好是属性或只读字段(,要么让你的类HomeTCHome派生。

public class Home : TCHome {
    Home() {TCHome.write = /* ... */ }
}

您应该根据您的要求使用公共内部访问说明符

protected class TCHome
{
   public static String write = "blablabla";
}

protected class TCHome
{
   internal static String write = "blablabla";
}

Protected修饰符与static正交。换句话说,这些都是独立的概念,因此没有理由可以从非派生的类访问protected方法或变量。

要从Home访问write成员,它应该是公开的:

protected class TCHome
{
       public static String write = "blablabla";
}

public class Home
{
   TCHome.write - //write does not come up to be accessible at all.;
}

以下是 C# 中访问修饰符的概述:

访问修饰符指定为方法声明的一部分 语法,可以是:

internal
private
protected
protected internal
public

如果未指定修饰符,则为该方法提供专用访问权限。

虚拟方法可以由派生类使用重写重写 关键词。

必须在派生类中重写抽象方法。如果有任何方法 一个类是抽象的,整个类必须声明为抽象的。

密封方法是重写继承的虚拟方法的方法 具有相同的签名。当一种方法被密封时,它不能 在派生类中重写。 方法访问修饰符

public 表示该方法在内部和外部都可以自由访问 在其中定义它的类。

内部意味着该方法只能由 相同的程序集。

受保护意味着该方法可以按其所属的类型访问 定义,并在该类型的派生类型中。这是用来给 派生类访问其基类中的方法。

受保护的内部意味着该方法可供 中定义的类型访问 同一程序集或派生程序集中的 to 类型。

私有方法只能在它们所在的类中访问 定义。

来源: http://blog.crsw.com/c-class-and-method-modifiers-overiew/