我正在练习setter和getter,收到此错误消息:
由于它是“方法组”,因此无法分配给“ GetnewName”
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
public class Program
{
public static void Main(string[] args)
{
Bird b = new Bird();
b.GetnewName = "Tweety";
b.Chirp();
Bird b2 = new Bird();
b2.GetnewName = "Woody";
b2.Chirp();
}
}
public class Bird
{
private string name;
private double weight = 30.5d;
public void SetName(string newName)
{
if (newName != null && newName.Length > 2)
{
System.Console.WriteLine("Bird already has a name");
this.name = newName;
}
else if (newName.Length < 3)
{
System.Console.WriteLine("New name must be longer than two chars");
}
else
{
name = newName;
}
}
public string GetnewName()
{
return this.name;
}
public void Chirp()
{
System.Console.WriteLine(name + " says chirp!");
}
}
}
答案 0 :(得分:1)
您需要使用SetName方法设置名称。
CREATE TABLE [dbo].[LogFiles] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Path] NVARCHAR (MAX) NULL,
[FileName] NVARCHAR (MAX) NULL,
[Success] BIT NULL,
[ErrorMessgae] NVARCHAR (MAX) NULL,
CONSTRAINT [PK_dbo.LogFiles] PRIMARY KEY CLUSTERED ([Id] ASC)
);
答案 1 :(得分:1)
您无法将字符串分配给方法,这会导致错误。 我c#我们不使用Java或C ++中的getter和setter。相反,我们使用了 properties 。您可以分配和读取值,就像它们在字段中一样,但是它们具有称为 accessors 的特殊方法。您应该像这样重构您的课程:
public class Bird
{
private string name;
private double weight = 30.5d;
public string Name
{
get => name;
set
{
if (value != null && value.Length > 2)
{
Console.WriteLine("Bird already has a name");
name = value;
}
else if (value != null && value.Length < 3)
{
Console.WriteLine("New name must be longer than two chars");
}
else
{
name = value;
}
}
}
public void Chirp()
{
System.Console.WriteLine(name + " says chirp!");
}
}
然后您可以将其用作:
var bird = new Bird();
// assign a value (equivalent to SetName method in your original code)
bird.Name = "Woody";
// read a value (equivalent to GetName method in your original code)
Console.WriteLine(bird.Name);
答案 2 :(得分:1)
您将GetnewName
当作property使用,但您将其定义为一对方法。
属性语法以单个名称组合了getter和setter。然后,C#将路由重新分配给setter,并读取getter方法:
public string Name {
get => name
set {
if (value != null && value.Length > 2) {
System.Console.WriteLine("Bird already has a name");
name = value;
} else if (value.Length < 3) {
System.Console.WriteLine("New name must be longer than two chars");
} else {
name = value;
}
}
}
注意:上面的get => name
使用了新语法。相同的旧语法为get { return name; }
答案 3 :(得分:-1)
似乎您想要这样:
public string Name
{
get; private set;
}
public void SetName(string newName)
{
if (newName != null && newName.Length > 2)
{
System.Console.WriteLine("Bird already has a name");
Name = newName;
}
else if (newName.Length < 3)
{
System.Console.WriteLine("New name must be longer than two chars");
}
else
{
Name = newName;
}
}
get;
将自动返回属性的值,而不需要私有后备属性,通常,您可以在属性内使用设置器来设置值,但是由于需要传递参数同样,看起来好像是将setter私有化并创建一个单独的方法来实际设置它会满足您的需求。