C# проблема с статическими конструкциями
Есть такой класс
public class Calculator
{
private Calculator()
{
}
public static Calculator WorkingWithConsole(string UserInput)
{
var Calculator = new Calculator();
string[] split = Regex.Split(UserInput, @"(\b[-+*\/]|[+-]?\d+[^-+*\/]\d+|[+-]?\d+|[-
+*\/()])").Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();
Checking(split);
CalculatingFromConsole(split);
return Calculator;
}
public static Calculator WorkingWithFile(string FilePath)
{
var Calculator = new Calculator();
if (!File.Exists(FilePath))
{
throw new FileNotFoundException("Файл не найден");
}
var oldPath = FilePath;
var tmp = new[] { Path.GetDirectoryName(oldPath), "Result.txt" };
_resultPath = Path.Combine(tmp);
using (FileStream file = new FileStream(_resultPath, FileMode.Create)) {
file.SetLength(0);
}
CalculatingFromFile(FilePath);
return Calculator;
}
private void Checking(string[] line)
{
.....
}
private void CalculatingFromFile(string[] line)
{
.....
}
}
В котором есть статические конструкторы.
Проблем в том что методы
CalculatingFromConsole(split);
Checking(split);
Не статичные, и поэтому ошибка an object reference is required for the non-static field
Можно ли, исправить эту ошибку, не превращая их в статичные методы?
Ответы (1 шт):
Автор решения: Boronnikov Andrey
→ Ссылка
Смотри, такая ошибка возникает, когда ты пытаешься вызвать "non-static" метод без создания экземпляра класса. Попробуй так:
public static Calculator WorkingWithConsole(string UserInput)
{
var Calculator = new Calculator();
string[] split = Regex.Split(UserInput, @"(\b[-+*\/]|[+-]?\d+[^-+*\/]\d+|[+-]?\d+|[-
+*\/()])").Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();
Calculator.Checking(split); //вот тут обращаться к создаваемому калькулятору
Calculator.CalculatingFromConsole(split);
return Calculator;
}
И рекомендую ознакомиться со static подробнее. Тут очень хорошо всё рассказывается