对象创建异常:子类实例调用setName时重复赋值同一值
问题原因分析
你的核心问题出在遍历赋值的逻辑上:
看这段处理基础动物属性的代码:
foreach (var Animals in list.OfType<Animals>()) { Animals.setId(list); Animals.setAge(age); Animals.setDiet(diet); Animals.setGender(gender); Animals.setName(name); }
这段代码会遍历列表里所有的Animals子类实例,把它们的name全部设置为当前textbox.Text的内容。
举个实际执行的场景:
- 第一次创建Turtle实例加入列表,执行循环后,这只乌龟的name被设为当时文本框里的内容,比如"小绿龟"。
- 修改文本框内容为"小黄鸟",创建Bird实例加入列表。此时执行循环,会把列表里的乌龟和小鸟的name都改成"小黄鸟"——旧动物的名字被新的文本框内容覆盖了,所以看起来所有动物都是同一个名字。
本质是你没有给刚创建的那只新动物单独赋值name,而是每次都给列表里所有动物重复刷一遍最新的文本框值,旧实例的name自然被覆盖成新内容了。
内容的提问来源于stack exchange,提问作者LOTUSxMw
相关产品推荐
相关产品推荐

