我正在从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错误
答案 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();
}
}
}
输出:
答案 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 ("");
}
}