能否根据布尔字段创建并关联类?C#类关联实现咨询
类的关联实现:通过布尔值关联Person与Pet类
完全可以通过布尔值关联Person和Pet类,而且不需要额外添加ID字段,直接在Person类里引入Pet类型的字段,用对象引用的方式关联就够了,这是面向对象编程里很常见的关联方式。
具体可以这么改你的代码:
1. 先定义Pet类
先创建一个简单的Pet类,用来存储宠物的信息:
public class Pet { public string Name { get; set; } public string Type { get; set; } public Pet(string name, string type) { Name = name; Type = type; } }
2. 修改Person类
在Person类里添加一个私有Pet字段,然后结合HasPet的逻辑来创建/销毁Pet对象:
public class Person { private string _name; private int _age; private string _hairColour; private string _eyeColour; private bool _hasPet; // 添加Pet字段用来关联宠物对象 private Pet _pet; // 基础构造函数:根据hasPet状态决定是否创建默认宠物 public Person(string name, int age, string hairColour, string eyeColour, bool hasPet) { _name = name; _age = age; _hairColour = hairColour; _eyeColour = eyeColour; _hasPet = hasPet; // 如果hasPet为true,默认创建一个宠物实例 if (_hasPet) { _pet = new Pet("默认宠物", "默认类型"); } } // 重载构造函数:允许直接传入指定宠物 public Person(string name, int age, string hairColour, string eyeColour, Pet pet) { _name = name; _age = age; _hairColour = hairColour; _eyeColour = eyeColour; _pet = pet; _hasPet = pet != null; } public void ChangePetStatus() { Console.Write("We heard that your pet status has changed..."); if (_hasPet) { Console.WriteLine(" we are sorry to hear that. Pet status has been changed."); _hasPet = false; _pet = null; // 解除宠物关联 } else { Console.WriteLine(" that's great. A pet is a lovely addition to the household. Pet status has been changed."); _hasPet = true; // 切换为有宠物时创建新的宠物实例 _pet = new Pet("新宠物", "猫"); } } public void Greetings() { string petInfo = _hasPet ? $"I have a pet named {_pet.Name}, it's a {_pet.Type}." : "I don't have a pet."; Console.WriteLine($"Hello my name is {_name} and I am {_age} years old. I have {_hairColour} hair and {_eyeColour} eyes. {petInfo}"); } }
3. 测试代码
在Main方法里可以这么用:
static void Main(string[] args) { // 创建带默认宠物的Person Person teacher = new Person("Phoebe", 32, "brown", "hazel", true); teacher.Greetings(); // 切换宠物状态 teacher.ChangePetStatus(); teacher.Greetings(); // 创建带指定宠物的Person Pet dog = new Pet("Buddy", "Dog"); Person student = new Person("Mike", 20, "blonde", "blue", dog); student.Greetings(); }
核心逻辑说明
- 直接用
_pet字段存储Pet对象的引用,当_hasPet为true时,_pet指向一个有效的Pet实例;为false时,把_pet设为null即可解除关联。 - 这种对象引用的方式比用ID关联更直接,符合面向对象的设计思想,不需要额外维护ID匹配的逻辑。
内容的提问来源于stack exchange,提问作者Lisa
相关产品推荐
相关产品推荐

