所以我有一个函数:
List<string> names = new string();
private static void getName(string name)
{
names.add(name);
}
当我尝试编译时,我得到: “非静态字段需要对象引用”通知。 我必须做什么才能使该成员(名称)与 getName 兼容?
我需要它是非静态的或转换的,因为我想将结果放入其他非静态函数和形式中。
最佳答案
您需要告诉系统哪个您感兴趣的名称列表。它是对象状态的一部分,是类的一个实例……但是是哪一个呢?也许您已经创建了该类的多个 实例-也许您没有 创建了该类的实例。静态方法对此不可见 - 那么您希望它从哪个实例获取 names
变量值?
换个例子,假设我们有这样一个类:
public class Person
{
public double MassInGrams { get; set; }
public double HeightInMetres { get; set; }
public static double ComputeBodyMassIndex()
{
// Which person are we interested in?
}
}
Person p1 = new Person { MassInGrams = 76203, HeightInMetres = 1.8 };
Person p2 = new Person { MassInGrams = 65000, HeightInMetres = 1.7 };
double bmi = Person.ComputeBodyMassIndex();
您希望结果如何?您要求 Person
类计算“BMI”,但没有告诉它要计算谁的 BMI。您需要向其提供该信息。
针对您的情况的一些选项:
- 将
names
改为静态 - 将方法更改为实例方法
- 传入类的一个实例
- 创建类的一个实例,可能返回它
- 以其他方式获取类的实例
顺便说一下,对于添加 名称的东西,这是一个非常奇怪的方法名称。这也有点不合常规...
关于C#访问静态函数中的非静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6615909/