繁体   English   中英

c#如何将静态类分配给实例变量?

[英]c# how assign static class to instance variable?

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

有什么办法,我可以有一个实例变量,它将是静态自类的别名? 喜欢:

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 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;
    }
}

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

静态属性不是在该类的实例(对象)中定义的属性,而是由该类本身定义的。 因此,您可以随时选择访问和修改它们,前提是您具有这样做所需的范围。

我没有看到调用MyClass.StaticProperty = <some expression> ,如果静态属性确实执行的功能是静态的。 如果它是对象的一部分,您不与类本身连接的东西,即该类的每个实例化对象可能不同,那么只需将其转换为常规属性即可。

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

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}.");

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

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

因此,您可以使用ClassName.VarName或直接通过类内的VarName访问类外的静态属性。

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

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

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

所以你可以这样写:

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";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM