1

例如,我不想在 Initialize() 方法中运行代码,而是只想写一行,比如 somecode.run() 它会为我运行一切,允许我在不同的位置编写所有代码为了组织。

我希望代码像在那个地方一样,所以我可以访问私人等。

最好的方法是什么?

编辑以澄清:

这是一个例子

public class game
{
    public void Initialize()
    { 
     I want to run some code here but I don't want to write it here, 
     I want to write it in another file for the sake of organization,
     and just  reference it somehow here, but yet still be able to use the
     privates as if it was in this spot
    }
}
4

2 回答 2

1

做你想做的事情的唯一方法是使用部分类。类似于以下内容:-

// In file: game1.cs
public partial class game
{
    private int Value;

    public void Initialize()
    {
        Run();
    }
}


// In file: game2.cs
public partial class game
{
    private void Run()
    {
        Value = 2;  // Access private field.
    }
}

编辑: 您提到您不想使用部分类,除非它满足您的要求。我认为这是满足您要求的唯一方法,因为您的要求之一是新方法能够访问原始类的私有成员。

部分类可能不满足您的要求的唯一可能情况是您还希望该方法访问您的局部变量。但是您可以通过该新方法的参数传递这些局部变量。

说了这么多,我个人不鼓励使用部分类,因为它通常不被认为是一种好的做法。这意味着如果您想以不同的方式进行,您将需要更改您的要求。

于 2012-07-31T03:16:46.653 回答
1

部分类和方法应该能够完成您所说的(MS 文档http://msdn.microsoft.com/en-us/library/wa80x488.aspx)。

我不确定为什么您需要做比 MSDN 文档中定义的更复杂的事情。您可以使用虚拟来允许覆盖并调用基本函数,以调用原始实现。有一种适当的方法可以使用继承来允许在适当的级别进行大量“调整”,但最初的部分类和方法应该允许您执行基本格式。

您通常会在预先编写的代码中看到部分示例(例如在 LINQ 中由 DataContext 编写)。

//auto-generated (or half implemented) code
public partial User
{
    public partial void OnFirstNameChanged();

    private string _FirstName = "";
    public string FirstName
    {
        get
        {
            return _FirstName;
        }
        set
        {
            _FirstName = value;
            OnFirstNameChanged();
        }
    }
}

//MyCustomStuff.cs
public partial User
{
    public partial void OnFirstNameChanged()
    {
        Console.Write(string.Format("Your name is {0}", FirstName));
    }
}
于 2012-07-31T03:32:22.080 回答