首先,请先通读问题,然后再得出结论Member '<method>' cannot be accessed with an instance reference的重复。
现在,我的问题有所不同,因为我的静态成员是另一个类:
using System;
public class Automobile
{
public static int NumberOfWheels = 4;
public static int SizeOfGasTank
{
get
{
return 15;
}
}
public static void Drive() { Console.WriteLine("Driving"); }
// public static event bool RunOutOfGas;
// Other non-static fields and properties...
}
class SimpleClass
{
// Static variable that must be initialized at run time.
static readonly long baseline;
public static Automobile A1;
// Static constructor is called at most one time, before any
// instance constructor is invoked or member is accessed.
static SimpleClass()
{
baseline = DateTime.Now.Ticks;
A1 = new Automobile();
}
}
public class Program
{
public static void Main()
{
Console.WriteLine("Automobile");
Automobile.Drive();
Console.WriteLine(Automobile.NumberOfWheels);
Console.WriteLine("SimpleClass");
Console.WriteLine(SimpleClass.A1.NumberOfWheels);
Console.WriteLine(SimpleClass.Automobile.NumberOfWheels);
}
}
SimpleClass.A1.NumberOfWheels
或SimpleClass.Automobile.NumberOfWheels
(甚至是SimpleClass.NumberOfWheels
)都会给我错误。
如何访问A1.NumberOfWheels
下的SimpleClass
?
结论:因此,如果您使用静态类而不是C#简单类型,则无法在根类({{}下访问其静态成员(A1.NumberOfWheels
)。 1}}),但受C#静态成员访问规则的限制。我问这个问题是因为我认为这是一个明显的设计缺陷,但是没有人解决这个特定问题并迅速在地毯下滑动。
可能更大的问题是:您到底想做什么?
@RufusL,很好的问题。我对静态变量或其目的的理解是,在其所有类对象之间共享一个真点。使用一个非常简单的示例对其进行说明,假设我有一堆单位数字乘法器对象,这些对象负责计算两个单位数字的倍数。最快的方法不是每次都计算它,而是在它们的静态变量中存储一个二维的一位数字多表,因此不需要真正的倍数,只需要查找即可。这将大大提高性能。
现在,
答案 0 :(得分:1)
SimpleClass.A1.NumberOfWheels
给您一个错误,因为A1
是一个实例,并且您试图通过实例访问静态字段。
SimpleClass.Automobile.NumberOfWheels
会给您一个错误,因为Automobil
中没有公共静态成员声明为SimpleClass
。
访问NumberOfWheels
的唯一方法是Automobile.NumberOfWheels
。
答案 1 :(得分:0)
A1
可能是SimpleClass
的静态成员,但是该静态成员仍然是对Automobile
类型的特定实例的引用。如果您需要访问A1.NumberOfWheels
,则也许NumberOfWheels
属性应该不是静态的。