Ошибка c#: "ссылка на объект требуется для нестатического поля, метода или свойства"

у меня есть два класса, один для определения параметров алгоритма и другой для реализации алгоритма:

класс 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().

ошибка:

ссылка на объект требуется для нестатического поля, метода или свойства 'VM_Placement.Программа.GetRandomBits ()'

Я что-нибудь пропустил?

3 ответов


на Main метод статический. Вы не можете вызвать нестатический метод из статического метода.

GetRandomBits()

не является статическим методом. Либо вы должны создать экземпляр Program

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

или

GetRandomBits() статический.


похоже, вы хотите:

public static string GetRandomBits()

без static, вам понадобится объект, прежде чем вы сможете вызвать GetRandomBits() метод. Однако с момента реализации GetRandomBits() не зависит от состояния Program объект, лучше всего объявить его static.


на Main метод статичен внутри Program класса. Вы не можете вызвать метод экземпляра изнутри статического метода, поэтому вы получаете ошибку.

чтобы исправить это, вам просто нужно сделать свой GetRandomBits() статический метод, а также.