gpt4 book ai didi

C#访问静态函数中的非静态成员

转载 作者:太空狗 更新时间:2023-10-29 21:02:48 25 4
gpt4 key购买 nike

所以我有一个函数:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com