我不能从多个动态类中引用静态类的成员
本文关键字:引用 静态类 成员 动态 不能 | 更新日期: 2023-09-27 17:50:26
我定义了一个静态类,然后尝试在我的代码中从多个动态类中引用它的成员(如果有帮助的话,所有这些动态类都派生自同一个基类)。我的代码是这样的:
public abstract class A
{
public A ()
public void performSomeOperation()
}
public class B : A
{
public override void performSomeOperation()
{
Console.WriteLine();
}
}
public class C : A
{
public override void performSomeOperation()
{
Console.WriteLine("This is " + MyStaticClass.stringValue);
}
}
public static class MyStaticClass
{
public string stringValue = "A string value";
}
在第一个派生类B
中我不能引用MyStaticClass
的成员,但是在第二个派生类C
中我可以。我不明白这有什么区别。是定义类的顺序吗?我需要在类名之前放置不同的修饰符吗?
我以前用过Python,定义类的顺序并不重要,所以我对此有点困惑。
如果你修复了所有的错误,你会发现B和C都可以很好地引用MyStaticClass:
using System;
public abstract class A
{
public A () {}
public virtual void performSomeOperation() {}
}
public class B : A
{
public override void performSomeOperation()
{
Console.WriteLine("B : This is " + MyStaticClass.stringValue);
}
}
public class C : A
{
public override void performSomeOperation()
{
Console.WriteLine("C : This is " + MyStaticClass.stringValue);
}
}
public static class MyStaticClass
{
public static string stringValue = "A string value";
}
public static class MyApp
{
public static int Main()
{
A anA = new B();
anA.performSomeOperation();
anA = new C();
anA.performSomeOperation();
return 0;
}
}
分享快乐。
您还需要将字段设置为static
—或者在这种情况下使用常量可能会更好:
public static class MyStaticClass
{
public const string stringValue = "A string value";
}
您也不能从C
访问它。您需要将字段定义为static
,以便使用类名访问它。让你的类只做static
是不够的。
public static string stringValue = "A string value";
您的stringValue
属性也必须是静态的,并且所有的类必须驻留在同一个程序集中或者驻留在引用MyStaticClass
所在程序集的程序集中。
public static class MyStaticClass
{
public static string stringValue = "A string value";
}
或者,如果属性是不可变的:
public static class MyStaticClass
{
private static string _stringValue = "A string value";
public static string stringValue { get { return _stringValue; }}
}
你的静态类不会被编译,因为它有非静态成员。
public static class MyStaticClass
{
public static string stringValue = "A string value";
}