如何在Class1中修复此ISeries接口实现?

时间:2019-01-06 05:57:43

标签: c# interface

我正在从ISeries界面的Setstart(2)函数开始开发一系列数字。我试图在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 :(得分:0)

您需要使方法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;
    }
}

答案 1 :(得分:0)

您应该尝试这样的事情。

因为必须使用一个变量,所以在这种情况下必须使用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();
        }
    }
}

输出:

https://maps.googleapis.com/maps/api/geocode/json?components=postal_code:94301|country:USA|administrativeArea=Arizona

答案 2 :(得分:0)

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

}