Проверка с помощью сеттера при создании объекта с помощью конструктора через метод - PullRequest
0 голосов
/ 20 октября 2019

У меня есть объект Person, созданный методом, внутри метода я использую свой конструктор для создания объекта. У меня есть некоторая проверка пола в моем сеттере, но я не вижу, как я могу заставить его использовать мой сеттер?

class Person
    {
        public string name;
        public int age;
        private string gender;
        private static List<Person> Personlist = new List<Person>();

        public Person(string _name, int _age, string _gender)
        {
            this.name = _name;
            this.age = _age;
            this.Gender = _gender;

        }

        public string Gender
        {

            get { return gender; }
            set
            {
                //value = de doorgegeven data
                if (value == "m" || value == "v")
                {
                    gender = value;
                }else
                {
                    gender = "Error: not a valid gender!";
                }
            }
        }
        public static void addPerson(string name, int age, string _gender){
            Personlist.Add(new Person(name, age, _gender));
        }
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Geef de naam van de persoon: ");
            var name = Console.ReadLine();
            Console.WriteLine("Geef de leeftijd van de persoon: ");
            var age = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Geef het geslacht van de persoon [MOET 'v' OF 'm' ZIJN]: ");
            var gender = Console.ReadLine();



            Person.addPerson(name, age, gender);
            Person.speek(name, age, gender);

        }
    }

1 Ответ

0 голосов
/ 20 октября 2019

Это похоже на дубликат C # добавить проверку на метод установки

Вы добавили сложность инициализации свойства через конструктор, что опять-таки не является стандартной практикой проектирования. Существуют определенные конструкции, которые вы можете поместить в реализацию, потому что компилятор не может помешать вам сделать это, однако это не означает, что вы должны это делать.

Также стоит прочитать о передовых практиках в c # для инициализации конструктора - https://softwareengineering.stackexchange.com/questions/51062/constructor-parameter-validation-in-c-best-practices

Я обновляю ответ, чтобы включить пример кода, как показано ниже -

//Independent storage, not part of Person class.
private static List<Person> PersonList = new List<Person>();

static void Main()
{
    Console.WriteLine("Geef de naam van de persoon: ");
    var name = Console.ReadLine();
    Console.WriteLine("Geef de leeftijd van de persoon: ");
    var age = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("Geef het geslacht van de persoon [MOET 'v' OF 'm' ZIJN]: ");
    var gender = Console.ReadLine();

    //PersonList.Add(new Person("Person1", 25, "M"));
    PersonList.Add(new Person(name, age, gender));

    var p = PersonList[0];
    if(p.IsPersonModelStateValid == true)
    {
        Console.WriteLine("Person state is valid");
    }
    else
    {
        Console.WriteLine("Person state is invalid");
    }
    p.PrintPerson();
    Console.Error.WriteLine("Done!");
}

И класс Person подвергается рефакторингу, как показано ниже -

using System;
using System.Collections;
using System.Collections.Generic;

namespace BSearch
{
    public class Person
    {
        public string name;
        public int age;
        private string gender;
        private bool isPersonStateValid;


        public Person(string _name, int _age, string _gender)
        {
            isPersonStateValid = true;
            this.name = _name;
            this.age = _age;
            this.Gender = _gender;
        }

        public string Gender
        {

            get { return gender; }
            set
            {
                //value = de doorgegeven data
                if (value == "m" || value == "v")
                {
                    gender = value;
                }
                else
                {
                    gender = "Error: not a valid gender!";
                    isPersonStateValid = false;
                }
            }
        }

        public bool IsPersonModelStateValid
        {
            get { return isPersonStateValid;}
            private set { isPersonStateValid = value; }
        }

        /*public static void addPerson(string name, int age, string _gender)
        {
            Personlist.Add(new Person(name, age, _gender));
        }*/

        public static void Speak(string name, int age, string _gender)
        {
            //TODO : The logic to make the person speak goes in here.
        }

        public void PrintPerson()
        {
            Console.WriteLine("name : " + this.name);
            Console.WriteLine("age : " + this.age);
            Console.WriteLine("gender : " + this.gender);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...