0

我试图从SalesPerson对象返回一个字符串fullNameMethod到主程序,但这不起作用。我究竟做错了什么?

class SalesPerson
{
    string firstName, lastName;
    public string FirstName { get { return firstName; } set { firstName = value; } }
    public string LastName { get { return lastName; } set { lastName = value; } }

    public SalesPerson(string fName, string lName)
    {
        firstName = fName;
        lastName = lName;
    }

    public string fullNameMethod()
    {
        string x = firstName + " " + lastName;
        return x;
    }
}

class Program
{
    static void Main(string[] args)
    {
        SalesPerson x = new SalesPerson("john", "Doe");
        Console.WriteLine("{0}", x.fullNameMethod);
    }
}
4

5 回答 5

15

您当前正在尝试访问属性之类的方法

Console.WriteLine("{0}",x.fullNameMethod);

它应该是

Console.WriteLine("{0}",x.fullNameMethod());

或者,您可以使用

public string fullName
{
   get
   {
        string x = firstName + " " + lastName;
        return x;
   }
}
于 2012-07-03T19:13:23.910 回答
2

你忘记了最后的()。它不是一个变量,而是一个函数,当没有参数时,你仍然需要最后的 ()。

对于未来的编码实践,我强烈建议对代码进行一些修改,因为这可能会令人沮丧:

 public string LastName
 { get { return lastName; } set { lastName = value; } }

如果这里发生了任何类型的处理(幸好这里没有发生),它会变得非常混乱。如果您要将代码传递给其他人,我建议:

public string LastName
{
  get
  {
     return lastName;
  }
  set
  {
     lastName = value;
  }
}

它要长得多,但在浏览一大段代码时更容易阅读。

于 2012-07-03T19:28:01.723 回答
1

您不必为此提供方法。您可以改为创建这样的属性:

class SalesPerson
{
    string firstName, lastName;
    public string FirstName { get { return firstName; } set { firstName = value; } }
    public string LastName { get { return lastName; } set { lastName = value; } }
    public string FullName { get { return this.FirstName + " " + this.LastName; } }
}

该类甚至可以缩短为:

class SalesPerson
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName { 
       get { return this.FirstName + " " + this.LastName; } 
    }
}

然后可以像访问任何其他属性一样访问该属性:

class Program
{
    static void Main(string[] args)
    {
        SalesPerson x = new SalesPerson("John", "Doe");
        Console.WriteLine(x.FullName); // Will print John Doe
    }
}
于 2012-07-03T19:15:23.330 回答
0

用于x.fullNameMethod()调用方法。

于 2012-07-03T19:13:24.683 回答
-2

这些答案都太复杂了

他写方法的方式很好。问题在于他调用该方法的位置。他没有在方法名后面加上括号,所以编译器认为他试图从变量而不是方法中获取值。

在 Visual Basic 和Delphi中,这些括号是可选的,但在 C# 中,它们是必需的。因此,要更正原始帖子的最后一行:

Console.WriteLine("{0}", x.fullNameMethod());
于 2014-07-19T21:10:04.593 回答