我正在尝试研究 C# 中的嵌套类。在阅读了许多文档和眼花缭乱之后,我仍然不清楚何时使用嵌套类。但据我所知,我做了一个小示例程序。我在下面粘贴我的代码。这个嵌套类程序是否以正确的逻辑实现? .嵌套类实际上使用什么 for ?。而且我对这个程序有疑问,我在程序中指明了这个疑问。请帮我 ...

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        Bank bankObj = new Bank();
        bankObj.CreateAccount();
        bankObj.ShowMyAccountNumber();
    }
}

class Bank
{
    static int accountNumber; //  here if I just declare this as int accountNumber without static it showing an error in the CreatePersonalAccount(int accNo) method's first line ie accountNumber = accNo; as "Cannot access a non-static member of outer type." What actually this error mean ?

    public class BankAccountSection
    {
        public bool CreatePersonalAccount(int accNo)
        {
            accountNumber = accNo;
            return true;
        }
    }

    public void CreateAccount()
    {
        bool result = new BankAccountSection().CreatePersonalAccount(10001);
    }

    public void ShowMyAccountNumber()
    {
        MessageBox.Show(accountNumber.ToString());
    }
}

最佳答案

嵌套类通常用于在封闭(外部)类之外没有用处的小型实用程序类。因此,嵌套类通常是 private 。 (甚至还有一个 FxCop rule 。)

您的代码

在您的情况下,嵌套类 BankAccountSection 并不是很有用,因为它本身没有状态。 CreatePersonalAccount 也可能只是外部类的一个方法。

关于 static int accountNumber; :这将使 accountNumber 成为所有 Bank 对象之间的共享字段,这违背了整个目的。不要那样做。如果确实需要在内部类内部设置Bank对象的某个字段,则需要将Bank对象的引用传递给内部类。 (这与 Java 不同,Java 在某些情况下会自动提供此类引用。)在您的特定情况下,只需摆脱内部类即可。

合法用例的示例

  • 你在一个方法中有一个很大的算法。您意识到使用许多小方法和实例变量将该算法提取到它自己的类中会增加可读性。由于该算法非常具体并且可能对其他类没有用处,因此您将该算法放入一个内部类中。因此,您可以避免使用仅由该算法使用的实例变量来混淆外部类。
  • 您创建了一个 List 数据结构,它在内部实现为 linked list 。由于您不向外界公开列表节点,因此您将节点设为内部类。

  • 有关的:
  • Why/when should you use nested classes in .net? Or shouldn't you?
  • 关于c# - C#中的嵌套类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15105736/

    10-12 06:13