Невозможно присвоить '', потому что это новичок группы методов - PullRequest
0 голосов
/ 12 сентября 2018

Я практикуюсь на сеттерах и геттерах, получил это сообщение об ошибке:

Невозможно назначить «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!");
        }
    }
}

Ответы [ 4 ]

0 голосов
/ 12 сентября 2018

Вы используете GetnewName, как если бы это было свойство , но вы определили его как пару методов.

Синтаксис свойства объединяет метод получения исеттер под одним именем.Затем C # перенаправляет присвоения установщику и читает метод получателя:

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; }

0 голосов
/ 12 сентября 2018

Кажется, вы хотите это:

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; автоматически возвращает значение вашего свойства, без необходимости в частном вспомогательном свойстве, и, как правило, вы можете использовать установщик внутри свойства для установки значения, но так как вам также нужно передать параметр, кажется, что создание сеттера частным и создание отдельного метода для его фактической установки будет соответствовать вашим потребностям.

0 голосов
/ 12 сентября 2018

Вы не можете присвоить строку методу, это вызывает ошибку. В C # мы не используем методы получения и установки, как в Java или C ++. Вместо этого у нас есть свойства , которые мы используем. Вы можете назначать и читать значения, как если бы они были полями, но у них есть специальные методы, называемые 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);
0 голосов
/ 12 сентября 2018

Вам необходимо установить имя, используя метод SetName.

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.SetName("Tweety");
            b.Chirp();

            Bird b2 = new Bird();
            b2.SetName("Woody");
            b2.Chirp();

            Console.ReadLine();
        }
    }
    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!");
        }
    }
}
...