我不能从多个动态类中引用静态类的成员

本文关键字:引用 静态类 成员 动态 不能 | 更新日期: 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";
}