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}.");
如果您真的希望某些东西是静态的,那么不要试图让它成为非静态的。简单地声明它。
不能用实例调用静态成员,例如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}.");
如果您真的希望某些东西是静态的,那么不要试图让它成为非静态的。简单地声明它。