Как исправить эту реализацию интерфейса ISeries в Class1? - PullRequest
0 голосов
/ 06 января 2019

Я разрабатываю серию чисел, начиная с функции Setstart (2) из ​​интерфейса ISeries. Я пытался реализовать этот интерфейс в Class1, но он выдал ошибку для меня. И я застреваю в этой ошибке и не смог выяснить, как это исправить. Что мне не хватает? Пожалуйста, помогите

Я попытался сделать все функции в интерфейсе общедоступными. Я пытался удалить спецификатор публичного доступа из интерфейса

public interface ISeries {
    void Setstart (int a);
    int GetNext ();
    void Reset ();
}

class Class1 : ISeries {

    int val;
    void Setstart (int a) {
        val = a;
    }

    int GetNext () {
        return val++;
    }

    void Reset () {
        val = 0;
    }

    static void Main () {
        Class1 c = new Class1 ();
        c.Setstart (2);
        Console.WriteLine (c.GetNext ());
        c.Reset ();
        Console.WriteLine ();
    }
}

Я ожидаю, что на выходе будет 3 и 0 генерируется ошибка

Ответы [ 3 ]

0 голосов
/ 06 января 2019

Вы должны попробовать что-то вроде этого.

Поскольку вам нужно поиграть с одной переменной, поэтому вам нужно использовать ключевое слово ref `в этом случае.

а также вы должны пометить весь метод внутри class как public, иначе вы не сможете получить доступ к этому методу внутри main

Код:

using System;

namespace StackoverflowProblem
{
    public interface ISeries
    {
        void Setstart(ref int value);
        int GetNext(ref int value);
        void Reset(ref int value);
    }

    public class Class1 : ISeries
    {
        public int val { get; set; }

        public void Setstart(ref int value)
        {
            this.val = value;
        }

        public int GetNext(ref int value)
        {
            value = value + 1;
            this.val = value;

            return this.val;
        }

        public void Reset(ref int value)
        {
            // Resetting val.
            value = 0;
            this.val = value;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Class1 c = new Class1();

            int value = 2;
            c.Setstart(ref value);

            Console.WriteLine(" " + c.GetNext(ref value));

            c.Reset(ref value);
            Console.WriteLine();
        }
    }
}

Выход:

enter image description here

0 голосов
/ 06 января 2019

val ++ будет инкриминировать после возврата текущего значения, ++ val будет сначала увеличивать, а затем возвращать значение, теперь вы должны получить 3, а также сделать его правильным для доступа к методам извне

class Class1 : ISeries {

int val;
public void Setstart (int a) {
    val = a;
}

public int GetNext () {
    return ++val;
}

public void Reset () {
    val = 0;
}

static void Main () {

    Class1 c = new Class1();
    c.Setstart(2);
    Console.WriteLine (c.GetNext());
    c.Reset();
    Console.WriteLine ("");
}

}

0 голосов
/ 06 января 2019

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

Вам необходимо сделать все 3 метода общедоступными в соответствии с вашим сценарием, например:

public void Setstart (int a) {

и вам нужно будет сначала добавить 1, а затем вернуться, чтобы получить 3 в качестве вывода, так как val++ вернет текущее значение и затем увеличит его на 1:

public int GetNext () {

        // return val++; // Post increment will not work according to question.
        val = val + 1;
        return val;
    }

Ваш класс с полной реализацией интерфейса будет выглядеть следующим образом:

public class Class1 : ISeries {

    int val;
    public void Setstart (int a) {
        val = a;
    }

    public int GetNext () {
        val = val + 1;
        return val;
    }

    public void Reset () {
        val = 0;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...