Невозможно получить доступ к статическому методу в нестатическом контексте - PullRequest
0 голосов
/ 29 мая 2018

Я только недавно начал свой промежуточный курс по программированию на C #, и я учусь создавать несколько классов и создавать методы для использования в моей программе.

Это очень новая тема для меня, поэтому я прошу прощенияесли это что-то очень очевидное или глупое.Я получаю сообщение ниже во всех моих методах:

Cannot access static method in non-static context

Код в классе методов:

public static int Add(params int[] numbers) {
        var sum = 0;

        foreach (var n in numbers) {
            sum += n;
        }

        return sum;
    }

    public static int Subtract(params int[] numbers) {
        var sum = 0;

        foreach (var n in numbers) {
            sum -= n;
        }

        return sum;
    }

    public static int Multiply(params int[] numbers) {
        var sum = 0;

        foreach (var n in numbers) {
            sum *= n;
        }

        return sum;
    }

    public static int Divide(params int[] numbers) {
        var sum = 0;

        foreach (var n in numbers) {
            sum /= n;
        }

        return sum;
    }

    public static string[] CheckingOfSomeSort(string userInput, int value, bool isAddition, bool isSubtraction, bool isDivision, bool isMultiplication) {
        if (userInput.Contains("+")) {
            var addition = userInput.Split('+');
            value = 1;
            isAddition = true;
            return addition;
        } else if (userInput.Contains("-")) {
            var subtraction = userInput.Split('-');
            value = 2;
            isSubtraction = true;
            return subtraction;
        } else if (userInput.Contains("*")) {
            var multiplication = userInput.Split('*');
            value = 3;
            isMultiplication = true;
            return multiplication;
        } else if (userInput.Contains("/")) {
            var division = userInput.Split('/');
            value = 4;
            isDivision = true;
            return division;
        }

        return null;
    }

Я пытаюсь создать калькулятор (что я уже сделал, однако ясейчас пытаюсь использовать методы)

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

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

Мой комментарий к вопросу:

эти методы являются статическими.(и то, как они используются, они тоже должны быть статичными).Но статические методы не могут быть доступны с помощью объекта Class, но могут напрямую обращаться к типу класса.здесь я предполагаю, что CalculatorMethods - это класс, в котором есть методы, и вы попытаетесь сделать что-то вроде calc.Add () .., что будет невозможно.Вместо этого сделайте CalculatorMethods.Add ()

Вместо этого вы можете попробовать сделать это, позвонив с Type напрямую, как belwo,

    void MethodOfCalling()
    {
        int sum = CalculatorMethods.Add(new int[2] { 1, 2 });
    }

вы можете видеть, я использовал CalculatorMethods (aимя класса - правильнее сказать тип класса) для вызова метода, а не объекта класса.

0 голосов
/ 29 мая 2018

Чтобы вызвать статический метод, вам нужно обратиться к нему из класса, в котором он определен, а не из экземпляра этого класса.например:

Calculator.Divide(); // works 


Calculator obj = new Calculator(); 
obj.Divide(); // Not works

NOTE : Divide() is a static method
0 голосов
/ 29 мая 2018

@ MrSanfrinsisco, Добро пожаловать в программирование на C #.Как вы спросите, очень легко вызывать статические методы.чтобы позвонить, выполните следующие шаги

1) создайте 1 файл класса.Допустим, что его Calculations.cs [поместите ваш код в этот класс], конечная выкладка вашего класса будет ..

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication3.Models
{
    public class Calculations
    {
        public static int Add(params int[] numbers)
        {
            var sum = 0;

            foreach (var n in numbers)
            {
                sum += n;
            }

            return sum;
        }

        public static int Subtract(params int[] numbers)
        {
            var sum = 0;

            foreach (var n in numbers)
            {
                sum -= n;
            }

            return sum;
        }

        public static int Multiply(params int[] numbers)
        {
            var sum = 0;

            foreach (var n in numbers)
            {
                sum *= n;
            }

            return sum;
        }

        public static int Divide(params int[] numbers)
        {
            var sum = 0;

            foreach (var n in numbers)
            {
                sum /= n;
            }

            return sum;
        }

        public static string[] CheckingOfSomeSort(string userInput, int value, bool isAddition, bool isSubtraction, bool isDivision, bool isMultiplication)
        {
            if (userInput.Contains("+"))
            {
                var addition = userInput.Split('+');
                value = 1;
                isAddition = true;
                return addition;
            }
            else if (userInput.Contains("-"))
            {
                var subtraction = userInput.Split('-');
                value = 2;
                isSubtraction = true;
                return subtraction;
            }
            else if (userInput.Contains("*"))
            {
                var multiplication = userInput.Split('*');
                value = 3;
                isMultiplication = true;
                return multiplication;
            }
            else if (userInput.Contains("/"))
            {
                var division = userInput.Split('/');
                value = 4;
                isDivision = true;
                return division;
            }

            return null;
        }
    }
}

2), затем перейдите на страницу, на которой вы хотите получить доступ к этому методу, и просто напишите,Вот, например, если вы хотите использовать его на default.aspx, используйте метод ниже.[Примечание: вы должны указать пространство имен вашего класса здесь, тогда только вы можете получить доступ к этому классу в моем примере, используя WebApplication3.Models;]

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebApplication3.Models;

namespace WebApplication3
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            int resultAdd= Calculations.Add(new int[3] { 1, 2, 3 });
            int resultSubstract= Calculations.Subtract(new int[3] { 1, 2, 3 });
            int resultDivide= Calculations.Divide(new int[3] { 1, 2, 3 });
            int resultMultiply=Calculations.Multiply(new int[3] { 1, 2, 3 });
        }

    }
}

это этоосновные примечания для вызова таких методов.

Дайте мне знать, что вам нужна помощь.:)

...