出于某种原因,当我在这个类中调用一个命名空间时,我得到一个错误,指出了这一点 它需要一个对象引用。我认为使用IMethodResponses类型的引用变量将允许我在自己的创建中访问方法,但 我无法做到这一点,也不能简单地在没有引用的情况下实现接口并使用它的方法......
有人可以帮我解决这个问题吗?我会发布界面本身,以防他们的错误。我应该注意到,我没有这么做。
//类实现接口:
internal sealed class Name : INameCreation, IMethodResponses
{
public ScratchCreate create = ScratchCreate.create;
ListCreate select = new ListCreate();
public IMethodResponses _responses = IMethodResponses; //<--Error
public static void ChooseName()
{
int response;
Console.WriteLine("Press \'1\' to select from a list of names, or \'2\' to create your own.");
Console.WriteLine("If you wish to quit, you may do so by pressing \'0\'");
response = int.Parse(Console.ReadLine());
do
{
Console.WriteLine("Sorry, you didn't enter any of the correct responses...");
Console.WriteLine("Press \'1\' to select from a list of names, or \'2\' to create your own.");
Console.WriteLine("If you wish to quit, you may do so by pressing \'0\'");
response = int.Parse(Console.ReadLine());
}
while (response != 0 || response != 1 || response != 2);
_responses.IntegerResponse(response);
}
public void IntegerResponse(int response)
{
switch (response)
{
case 0:
Console.WriteLine("Goodbye!");
break;
case 1:
break;
case 2:
break;
}
}
//接口:
namespace PlayerCreation
{
public interface INameCreation
{
}
public interface IMethodResponses
{
void IntegerResponse(int response);
void StringResponse(string response);
}
}
答案 0 :(得分:1)
您正在使用类型分配IMethodResponses类型的引用变量,而不是类型的实例。
要解决此问题,您只需执行以下操作:
public Name()
{
_responses = (IMethodResponses)this;
}
编辑:我刚注意到,您的代码还有两个问题: 1. _responses是非静态的,您在静态类中访问此变量,这将无效。 2. StringResponses尚未实现。
如果你想将ChooseName维护为静态并且可以访问同一个实例,那么你必须实现一个单例。
答案 1 :(得分:0)
如果您将IntegerResponse方法设为静态,则可以使用以下命令调用它:
Name.IntegerResponse(...);
有关:
public IMethodResponses _responses = IMethodResponses;
从静态方法中,您只能访问静态成员。 将类型设置为相同类型的变量将不起作用。 预期适合_responses的是其类型的任何类的实例或实现其接口的任何类( IMethodResponses )。因为你不能创建接口的实例而不是后者。
public static IMethodResponses _responses = new Name();
这可以工作但不需要,因为在方法定义之前使用static关键字可以安全地使IntegerResponse成为静态。
使用public static void ChooseName()
有点尴尬。此方法是静态的,不返回任何内容。它只使用Console.Writeline。你会发现,一旦你开始开发一个真正的应用程序,这将需要重做。