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

标签 c# static member

所以我有一个函数:

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/

相关文章:

C++ : Is it bad practice to use a static container in a class to contain pointers to all its objects for ease of access?

c++ - Visual Studio 2015 Natvis 如何显示函数静态变量?

.net - 为什么 dotnet 的 char.IsLower() 是静态方法?

c++ - const 成员函数中模板成员的常量

c# - UWP获取国家/地区电话号码前缀

c# - C# 中的简单输入验证

c# - 如何有效地检索具有与属性名称相似的命名字符串的特定类属性值

c# - UWP - .NET Native 工具链编译错误

c++ - 访问特定结构成员时程序崩溃

c++ - 我可以转换对象并访问 C++ 中的私有(private)数据成员吗?