【问题标题】:interface for an enum枚举接口
【发布时间】:2014-01-14 12:35:46
【问题描述】:

我正在尝试将现有的 C# 项目移植到新的分布式项目,使用连接客户端和服务器组件的接口(它是一款用于大学练习的推箱子游戏)。

这是我的问题:

在一个组件中,比如说:Level.cs,我有:

Level.cs

namespace Sokoban
{
public enum MoveDirection { Right, Left, Down, Up }


public class Level
    {
    private MoveDirection sokoDirection = MoveDirection.Right;
    ...
    }
...
}

另一方面,接口:

Interfaces.cs:

namespace Interfaces
    {
    public class ILevel : MarshalByRefObject
        {
        ---> what should i place here??? <---
        }
    }

我尝试了以下选项但没有成功:

Interfaces.cs:

public virtual enum MoveDirection { get; set; }
public virtual enum MoveDirection() { throw new NotImplementedException(); }

Level.cs:

public static enum MoveDirection { return { Right, Left... }; }
public static enum MoveDirection { get { return { right, Left, ...}; } }

【问题讨论】:

  • 你为什么使用MarshalByRefObject?您是否尝试使用远程处理? Remoting 是一项遗留技术,为了向后兼容现有应用程序而保留,不建议用于新开发。现在应该使用 WCF 或 ASP.NET Web API 开发分布式应用程序。请参阅msdn.microsoft.com/en-us/library/vstudio/xws7132e.aspx 顶部的注释以获取证据。
  • 嗨,约翰!感谢您的即时回复!
  • 还有,为什么你使用MarshalByRefObject
  • 我将 Marshal 用于序列化目的。你是对的:我正在使用 Remoting。
  • 为自己省去悲伤,别再那样做了。远程处理是古老的,早已被 WCF 取代。您应该尽快停止使用 Remoting。

标签: c# interface enums remoting .net-remoting


【解决方案1】:
public interface ILevel
{
     MoveDirection MoveDirection { get; set; }
}

和实施:

public class Level : MarshalByRefObject, ILevel
{
     public MoveDirection MoveDirection { get; set; }    
}

【讨论】:

  • 嗨!我试过了,但 Visual Studio 抱怨:语法错误,预期:“,”。
  • 它在哪里说它不见了?您可能需要发布完整的代码。
  • 这个问题我真的不清楚,但也许他想要 Soko 这个名字,如@9​​87654323@ 的实现:public class Level : MarshalByRefObject, ILevel { public MoveDirection SokoDirection { get; set; } }
  • 嗨!这似乎接近解决方案。我试过了,现在问题是://错误建议:“Interfaces.ILevel.MoveDirection 是一个属性,但用作类型”:public MoveDirection MoveDirection { get;设置}
  • 再一次,我们需要剩下的代码。可能是您尝试在类定义中间的某个位置(即不在方法中)使用 ILevel.MoveDirection。
【解决方案2】:

我不知道我是否完全符合这个问题。 也许是这种情况,您想为所有实现接口或使用类的类提供枚举。 我也尝试通过接口提供枚举。但没有运气。

我是一个 C# 初学者,所以我的可能微不足道的方法是:
1. 通过抽象类提供。它可以工作,但如果它最初足以使用接口(写overwrite 等),你会在类定义中得到一点开销。
2. 我的解决方法是在单独的命名空间中提供枚举,将包含在您需要的任何地方
在您的情况下,例如:


Interfaces.cs

using Enumerations;
namespace Interfaces
{
    interface ILevel : MarshalByRefObject
    {
        int changeDirection(MoveDirection newDirection);
    }
}
namespace Enumerations
{
    public enum MoveDirection { Right, Left, Down, Up };
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 2020-10-26
    • 1970-01-01
    相关资源
    最近更新 更多