代码之家  ›  专栏  ›  技术社区  ›  Daniel

制作与结构实例交互的方法

  •  0
  • Daniel  · 技术社区  · 7 年前

    我们在类中遍历了结构,我们的任务是在结构内创建一个方法,该方法可以更改实例的字段。例如,如果另一个人是经理,则更改其姓名。

    struct Employee 
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string FullName
        {
            get => FirstName + LastName;
        }
        public int Age { get; set; }
        public string Role { get; set; }
        public double Salary { get; set; }
        public bool IsManager { get; set; }
    
        public static void EditInfo(ref Employee e1, ref Employee e2)
        {
            if (e1.IsManager)
            {
                Console.WriteLine($"Feel free to set {e2.FirstName}'s info: ");
                e2.FirstName = Console.ReadLine();
                e2.LastName = Console.ReadLine();
                Console.WriteLine($"From now on thy name is {e2.FullName}!");
            }
            else if (e2.IsManager)
            {
                Console.WriteLine($"Feel free to set {e1.FirstName}'s info: ");
                e1.FirstName = Console.ReadLine();
                e1.LastName = Console.ReadLine();
                Console.WriteLine($"From now on thy name is {e1.FullName}!");
            }
        }
    }
    

    1 回复  |  直到 7 年前
        1
  •  2
  •   Koby Duck    7 年前

    编辑: 澄清

    private set; EditInfo 实例方法。这或多或少对每个人都有好处 Employee

    public class Employee
    {
        public Employee(string firstName, string lastName, bool isManager, ...)
        {
            FirstName = firstName;
            LastName = lastName;
            IsManager = isManager;
            // remaining properties...
        }
    
        public string FirstName { get; private set; }
        public string LastName { get; private set; }
        public bool IsManager { get; private set; }
        // remaining properties...
    
        public void Edit(Employee requester)
        {
            if (requester.IsManager) {
                // query input from the user, make changes, and notify the user.
            } else {
                // notify the user that he doesn't have permission to edit this employee. 
            }
        }
    }
    

    因此,使用它就成了:

    var manager = new Employee("Your", "Boss", isManager: true);
    var sheep = new Employee("John", "Doe", isManager: false);
    
    sheep.Edit(manager); // Essentially says "edit sheep using manager as permission".
    

    其次,除非你的教练禁止你使用 class ref 声明。 struct 裁判 在正确的环境中非常有用,但除非你知道权衡和严格编码,否则很容易引入错误,考虑到你的经验水平,很难推理。

    裁判 关键字。另一方面,结构确实在没有 裁判

    总之,更喜欢上课 除非您有充分的理由使用结构(即GC性能、非常特殊的用途类型)。最重要的是,目标是可读性。