C#访问静态函数中的非静态成员
所以我有一个function:
List 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
则需要将names
设为静态:
// If this is static, you can use it from your static method static List names = new List ();
问题是getName
是在您的类型上定义的,而不是在类型的实例上定义的。 但是,定义了names
,因此您的类型的每个实例都有自己的值。
names
是一个将存在于类实例中的对象,例如MyClass mc = new MyClass();
然后你可以访问mc.names
。 可以使用类名调用静态字段而不使用类的实例,例如MyClass.getName("");
将工作。 因此,当您在逻辑上思考时,该类不包含名称,只有“该类的实例”包含它。 因此,您要么将该列表设置为静态,并且当您调用MyClass.names
或将getName方法设置为非静态时,它将是“相同的List实例”,并且它将仅从实例调用,因此不会MyClass.getName("")
是可能的,但是mc.getName("");
这是你正在努力做的事情。
静态方法无法访问类字段。 要么使名称为静态,要么使getName()为非静态。 你是什么意思“兼容”。 问问自己……这个方法需要是静态的吗? 它的目的是什么,你打算如何使用它?
你无法以这种方式访问它,你需要实例化包含成员的类。
上述就是C#学习教程:C#访问静态函数中的非静态成员分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1022353.html