Error de C #: “Se requiere una referencia de objeto para el campo, método o propiedad no estático”

Tengo dos clases, una para definir los parámetros del algoritmo y otra para implementar el algoritmo:

Clase 1 (parámetros del algoritmo):

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(); } } 

Clase 2 (implementar algoritmo):

 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  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; } } } } } 

Recibo un error en Population[i].bits = GetRandomBits(); en Main() .

El error es:

Se requiere una referencia de objeto para el campo, método o propiedad no estático ‘VM_Placement.Program.GetRandomBits ()’

¿Me estoy perdiendo algo?

    El método Main es estático. No puede invocar un método no estático desde un método estático.

     GetRandomBits() 

    no es un método estático O tienes que crear una instancia de Program

     Program p = new Program(); p.GetRandomBits(); 

    o hacer

    GetRandomBits() estático.

    Parece que quieres:

     public static string GetRandomBits() 

    Sin static , necesitaría un objeto antes de poder llamar al método GetRandomBits() . Sin embargo, dado que la implementación de GetRandomBits() no depende del estado de ningún objeto de Program , es mejor declararlo static .

    El método Main es estático dentro de la clase de Program . No puede llamar a un método de instancia desde un método estático, por lo que está obteniendo el error.

    Para solucionarlo solo necesita hacer que su método GetRandomBits() estático.