C#封装(获取和设置)

时间:2012-01-07 11:19:30

标签: c# oop encapsulation

我正在使用Head First C#书进行练习。

这段代码应该是关于封装的。

class DinnerParty
{
    private int NumberOfPeople;
         ....

    public void SetPartyOptions(int people, bool fancy) {
        NumberOfPeople = people;
        .....
    }

    public int GetNumberOfPeople() {
        return NumberOfPeople;
    }
}

form1班级

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

        dinnerParty = new DinnerParty() {NumberOfPeople = 5 };

        ...

这假设有用吗?

Visual Studio向我显示错误。 (由于其保护级别无法访问)

我很陌生。

由于

6 个答案:

答案 0 :(得分:1)

那是因为NumberOfPeople private表示无法从课程DinnerParty外部访问,因此您需要将其设为public

答案 1 :(得分:0)

你可以通过写下类似的东西来使用“Fluent interface”的想法:

class DinnerParty
{
    private int NumberOfPeople;

         ....

    public DinnerParty SetPartyOptions(int people, bool fancy) {
        NumberOfPeople = people;
        .....

        return this; // Return own instance to allow for further accessing.
    }

    public int GetNumberOfPeople() {
        return NumberOfPeople;
    }
}

然后叫它:

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

        dinnerParty = new DinnerParty().SetPartyOptions( 5, true );

        ...

答案 2 :(得分:0)

NumberOfPeople是私人会员,你不能在课堂上使用它

答案 3 :(得分:0)

NumberOfPeople是私有的,所以它不起作用。这里最好的解决方案是创建公共属性而不是私有字段,或者添加构造函数并在那里初始化该字段。

答案 4 :(得分:0)

不,这不应该工作。我看不到这本书,所以我无法对上下文发表评论。但是:

public int NumberOfPeopoe {get;set;} 

是一个合理的解决方法。

答案 5 :(得分:0)

您无法初始化范围(类)之外的私有字段。

将其作为财产。

public int NumberOfPeople { get; set; }

现在,这将有效

dinnerParty = new DinnerParty() { NumberOfPeople = 5 };