.net:将方法设置为public会出错。将其设置为私有会返回错误

时间:2017-04-21 08:17:49

标签: c#

class code

form code

家庭作业分配是创建一个类并创建一个使用该类中定义的方法的窗体。这是他完成的代码。

class HappyBirthday {

    //====================
    //  CLASS VARIABLES
    //====================
    private int numberOfPresents;
    private string birthdayMessage;
    private bool birthdayParty;

    //===========================
    //  DEFAULT CONSTRUCTOR
    //===========================
    public HappyBirthday()
    {
        numberOfPresents = 0;
        birthdayParty = false;
    }

    //===========================
    //      METHOD
    //===========================
    private string getMessage(string givenName)
    {

        string theMessage;

        theMessage = "Happy Birthday " + givenName + "\n";
        theMessage += "Number of presents = ";
        theMessage += numberOfPresents.ToString() + "\n";

        if (birthdayParty == true) {
            theMessage += "Hope you enjoy the party!";
        }
        else {
            theMessage += "No party = sorry!";
        }

        return theMessage;
    }

    //================================
    //      READ AND WRITE PROPERTY
    //================================
    public string MyProperty {
        get { return birthdayMessage; }

        set { birthdayMessage = getMessage(value); }
    }

    //================================
    //     WRITE-ONLY PROPERTY
    //================================
    public int PresentCount {
        set { numberOfPresents = value; }
    }

    public bool hasParty {
        set { birthdayParty = value; }
    }

}

根据他的代码,字符串getMessage是私有的。将其设置为私有使得它在我的表单代码button_1“由于其保护级别无法访问”时出现错误

所以我把它设置为公开。这会返回另一个错误。

“没有给出的参数对应于'HappyBirthday.getMessage(string)”所需的形式参数'givenName'

2 个答案:

答案 0 :(得分:1)

"生成的方法"生日消息为private(这意味着它仅在其定义的类中可见/可访问),应通过MyProperty属性访问。

Form1课程中,更改此内容:

MessageBox.Show( birthdayMessage.getMessage());

MessageBox.Show(birthdayMessage.MyProperty);

最后,使用name的参数生成消息(消息将用于谁)。您可以先set MyProperty属性,然后生成该名称的生日。所以:

birthdayMessage.MyProperty = "Herbert";
var message = birthdayMessage.MyProperty; //<-- this now contains the full message

答案 1 :(得分:-1)

你的问题是函数的调用:

 public string getMessage (string givenName)

该方法在调用时需要给它一个String,但你可以这样调用它:

MessageBox.Show( birthdayMessage.getMessage());

将通话更改为

MessageBox.Show( birthdayMessage.getMessage("Clay"));

它应该有用。