C#错误:“非静态字段,方法或属性需要对象引用” [英] C# error: "An object reference is required for the non-static field, method, or property"
本文介绍了C#错误:“非静态字段,方法或属性需要对象引用”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有两个类,一个用于定义算法参数,另一个用于实现算法:
I have two classes, one for defining the algorithm parameters and another to implement the algorithm:
第1类(算法参数):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace VM_Placement
{
public static class AlgorithmParameters
{
public static int pop_size = 100;
public static double crossover_rate = 0.7;
public static double mutation_rate = 0.001;
public static int chromo_length = 300;
public static int gene_length = 4;
public static int max_allowable_generations = 400;
static Random rand = new Random();
public static double random_num = rand.NextDouble();
}
}
第2类(实现算法):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace VM_Placement
{
public class Program
{
public struct chromo_typ
{
public string bits;
public float fitness;
//public chromo_typ(){
// bits = "";
// fitness = 0.0f;
//}
chromo_typ(string bts, float ftns)
{
bits = bts;
fitness = ftns;
}
};
public static int GetRandomSeed()
{
byte[] bytes = new byte[4];
System.Security.Cryptography.RNGCryptoServiceProvider rng =
new System.Security.Cryptography.RNGCryptoServiceProvider();
rng.GetBytes(bytes);
return BitConverter.ToInt32(bytes, 0);
}
public string GetRandomBits()
{
string bits="";
for (int i = 0; i < VM_Placement.AlgorithmParameters.chromo_length; i++)
{
if (VM_Placement.AlgorithmParameters.random_num > 0.5f)
bits += "1";
else
bits += "0";
}
return bits;
}
public static void Main(string[] args)
{
Random rnd = new Random(GetRandomSeed());
while (true)
{
chromo_typ[] Population = new chromo_typ[VM_Placement.AlgorithmParameters.pop_size];
double Target;
Console.WriteLine("\n Input a target number");
Target = Convert.ToDouble(Console.ReadLine());
for (int i = 0; i < VM_Placement.AlgorithmParameters.pop_size; i++)
{
Population[i].bits = GetRandomBits();
Population[i].fitness = 0.0f;
}
}
}
}
}
我在 Population [i]上遇到错误。bits= GetRandomBits();
在 Main()
。
错误是:
非-static字段,方法或属性'VM_Placement.Program.GetRandomBits()'
An object reference is required for the non-static field, method, or property 'VM_Placement.Program.GetRandomBits()'
我错过了什么吗?
推荐答案
Main
方法是静态的。您不能从静态方法调用非静态方法。
The Main
method is Static. You can not invoke a non-static method from a static method.
GetRandomBits()
不是静态方法。您必须创建 Program
is not a static method. Either you have to create an instance of Program
Program p = new Program();
p.GetRandomBits();
或make
GetRandomBits()
静态。
这篇关于C#错误:“非静态字段,方法或属性需要对象引用”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文