非常简单直接。我创建了2个类: 第一堂课。在这里我声明了一个静态变量,以便能够在没有初始化的情况下在另一个类中访问它。
protected class TCHome
{
protected static String write = "blablabla";
}
第二课:
public class Home
{
TCHome.write - //write does not come up to be accessible at all.;
}
我期待的是我应该能够直接调用变量 - "写"但它根本没有出现。什么是正确的方法?请。
答案 0 :(得分:3)
protected
表示只能通过同一个类或结构中的代码或从该类派生的类中访问类型或成员。
您应该将其设为public
或internal
。
- public :类型或成员可以通过其中的任何其他代码访问 相同的程序集或引用它的另一个程序集。
- 私人:类型 或只能通过同一类或结构中的代码访问或成员。
- 受保护:只能通过相同的代码访问类型或成员 类或结构,或者从该类派生的类。
- 内部:类型或成员可以通过相同的代码访问 装配,但不是来自另一个装配。
- 受保护的内部:任何代码都可以访问类型或成员 声明它的程序集,或派生类中的程序集 在另一个集会中。必须从另一个组件进行访问 在类声明中,派生自其中的类 声明了protected 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";
}
答案 1 :(得分:3)
访问修饰符应该是公共的,如下所示
public class TCHome
{
public static String write = "blablabla";
}
答案 2 :(得分:2)
你把保护写入了写,必须有子类。
使用public
:
public static String write = "blablabla";
答案 3 :(得分:2)
您应该根据您的要求使用公开或内部访问说明符
protected class TCHome
{
public static String write = "blablabla";
}
OR
protected class TCHome
{
internal static String write = "blablabla";
}
答案 4 :(得分:2)
Protected
修饰符与static
正交。换句话说,这些是独立的概念,因此没有理由可以从未派生的类中访问protected
方法或变量。
要从write
访问Home
成员,它应该是公开的:
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 表示该方法可以在内部和外部自由访问 定义它的类。
内部表示该方法只能在。中定义的类型中访问 同样的集会。
protected 表示该方法可以在其所在的类型中访问 已定义,以及该类型的派生类型。这是用来给 派生类访问其基类中的方法。
protected internal 表示该方法可供定义的类型访问 相同的程序集或派生程序集中的类型。
私有方法只能在它们所在的类中访问 定义
来源:http://blog.crsw.com/c-class-and-method-modifiers-overiew/
答案 5 :(得分:2)
在home类中继承tchome。或将tchome从受保护变为公共。
答案 6 :(得分:2)
您有两种选择:
要么将您的变量设为公开(不建议将公共字段设置为公用字段,更好的是make属性或只读字段),要么让您的课程Home
来自TCHome
。
public class Home : TCHome {
Home() {TCHome.write = /* ... */ }
}