c# 如何将 static class 分配给实例变量?

c# how assign static class to instance variable?

不能用实例调用静态成员,例如instance.myStaticProperty

有什么方法可以让我拥有一个实例变量,它将成为 static self class 的别名?喜欢:

class myClass
{
    public string a ="hello";
    public static string b ="world";

    public myClass myVariable = global::myClass;   // <--- phseudo code
}

我可以打电话给:

myClass instance= new myClass();
instance.myVariable.b; //

不,没有。最接近的是使用 using.

您的静态 class 定义:

class ClassA
{
    public static string A = "A";
}

并使用它:

using StaticClassA = ConsoleApp1.ClassA;

class Program
{
    static void Main(string[] args)
    {
        string a = StaticClassA.A;
    }
}

虽然收获不大,但它可能会稍微简化您的命名。

另一个(更酷的)选项是 static using:

using static ConsoleApp1.StaticClassA;

class Program
{
    static void Main(string[] args)
    {
        string a = A;
    }
}

静态成员在 class 的所有实例或同一 T 的 Class 的所有实例之间共享。

因此您可以使用 ClassName.VarName 或直接通过 class.

中的 VarName 访问 class 之外的静态属性

您可以从所有非静态方法访问静态字段以及属性和方法。

您还可以添加映射静态成员的实例成员。

除了静态存在本身之外,静态事物的实例不能存在。

所以你可以这样写:

class myClass
{
  public string a = "hello";

  static public string b = "world";

  public string B { get { return b; } set { b = value; } }

  public void DoSomething()
  {
    b = "new world";
  }
}

然后像这样使用它:

myClass instance= new myClass();
instance.DoSomething();
myClass.b = "another world";
instance.B = "C# world";

你正试图在那里做一个反模式。

静态属性不是在 class 的实例(对象)中定义的属性,而是由 class 本身定义的。因此,只要您有所需的范围,您就可以随时访问和修改它们。

如果静态 属性 执行的函数确实是静态的,那么我在调用 MyClass.StaticProperty = <some expression> 时没有发现问题。如果它是对象的一部分,你不与 class 本身连接的东西,即它可能对于那个 class 的每个实例对象都不同,那么只需将它变成一个常规的 [=26] =] 代替。

一些静态属性和方法的示例:

public class DoMath
{
   public static string Pi { get; private set; } = "3.14";
   public static double X {get; set;}
   public static double Y {get; set;}

   public static double Sum() => X + Y;
}

DoMath.X = 3.5;
DoMath.Y = 4;
double result = DoMath.Sum();
Console.WriteLine($"Pi is equal to {DoMath.Pi}.");

如果您真的希望某些东西是静态的,那么不要试图让它成为非静态的。简单地声明它。