【问题标题】:(Partial Class) Dividing a class into multiple classes(部分类)将一个类划分为多个类
【发布时间】:2015-12-21 05:15:44
【问题描述】:

基本上我想要的是将一个类分成多个类。我尝试过使用 partial 函数,但似乎无法正常工作。 我想做的是为case Action.Answer: 下的100多个区域创建多个类,如您所见:

namespace My.Network
{
public unsafe class MsgDialog : Msg
{
    public const Int16 Id = _MSG_DIALOG;
    public enum Action
    {
         //Actions used
    }
    [StructLayout(LayoutKind.Sequential)]
    public struct MsgInfo
    {
         //MsgInfo
    }
    public static Byte[] Create(Int32 TaskId, Int16 Param, Byte IdxTask, Action Action, String Text)
    {
         //act
    }
    public static void Process(Client Client, Byte[] Buffer)
    {
        try
        {
            if (Client == null || Buffer == null || Client.User == null)
                return;

            Int16 MsgLength = (Int16)((Buffer[0x01] << 8) + Buffer[0x00]);
            Int16 MsgId = (Int16)((Buffer[0x03] << 8) + Buffer[0x02]);
            Int32 TaskId = (Int32)((Buffer[0x07] << 24) + (Buffer[0x06] << 16) + (Buffer[0x05] << 8) + Buffer[0x04]);
            Int16 Param = (Int16)((Buffer[0x09] << 8) + Buffer[0x08]);
            Byte IdxTask = (Byte)Buffer[0x0A];
            Action Action = (Action)Buffer[0x0B];
            String Text = Program.Encoding.GetString(Buffer, 0x0E, Buffer[0x0D]);

            Player Player = Client.User;

            switch (Action)
            {
                case Action.Answer:
                    {
                        100 + Regions
                    }
            }
        }
        catch (Exception Exc) { Program.WriteLine(Exc); }
    }
}
}

根据@Enigmativity 的要求,此处遵循这些区域之一的示例:

case 945: 
    {
        Position += ScriptHandler.SendText("Your inventory is full!", Client, ref Data, Position);
        Position += ScriptHandler.SendOption(255, "I see.", Client, ref Data, Position);
        Position += ScriptHandler.SendFace(102, Client, ref Data, Position);
        Position += ScriptHandler.SendEnd(Client, ref Data, Position);
        ScriptHandler.SendData(Client, Data, Position);
        break;
    }

【问题讨论】:

  • 如果你的类中有 100 多个区域,那么你需要的不是部分类而是严重的重构
  • 您需要向我们展示100 + Regions 中的代码实际上是什么。也许一个典型的子集就足够了。
  • @Enigmativity 我刚刚将它添加到主帖
  • @Noobzilla - 这很好,但要让我们看到一种模式,我们需要看到不止一个模式。我同意一个是所有的子集,但我的意思是一个实质性的子集。而且,我们还需要查看PositionScriptHandler 等的类型。您确实需要minimal reproducible example

标签: c# class partial-views partial partial-classes


【解决方案1】:

如果您有 100 个#regions,那么您可能不需要将其拆分为部分类。做一些重构!您应该将所有区域提取为方法。如果您使用的是 Visual Studio,则只需选择代码并右键单击即可。去 Refactor -> Extract -> Method 然后你可以给它一个有意义的名字。

现在,您可以将所有这些方法移至另一个或多个实用程序类。

那么您的代码将如下所示:

XXXX ();
XXXX ();
  .
  .
  .
XXXX ();

其中 XXXX 都是方法的抽象名称。当人们阅读您的代码并且他们不想知道该方法的太多细节时,他们可以抽象地阅读方法调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 2013-09-19
    • 2023-02-10
    • 2012-10-02
    相关资源
    最近更新 更多