ToB企服应用市场:ToB评测及商务社交产业平台

标题: 重构代码之将引用范例更改为值范例 [打印本页]

作者: 九天猎人    时间: 2024-11-28 12:07
标题: 重构代码之将引用范例更改为值范例
将引用范例更改为值范例的目的是将引用范例转换为值范例,通常是为了简化代码,减少副作用,进步代码的可明白性和可维护性。这个重构技能实用于那些引用范例在某些情况下表现得像值范例的场景,尤其是当引用范例不需要共享状态时。通过这种方式,可以制止复杂的引用管理,减少不须要的共享状态。
一、何时使用将引用范例更改为值范例


二、如何进行将引用范例更改为值范例

三、示例

假设有一个类 Person,它包含一个 Address 类作为属性,如今我们想将 Address 类从引用范例转换为值范例。
原始代码:
  1. public class Address
  2. {
  3.     public string Street { get; set; }
  4.     public string City { get; set; }
  5. }
  6. public class Person
  7. {
  8.     public Address Address { get; set; }
  9.     public Person(string street, string city)
  10.     {
  11.         Address = new Address { Street = street, City = city };
  12.     }
  13. }
  14. public class Program
  15. {
  16.     public static void Main()
  17.     {
  18.         var person1 = new Person("123 Main St", "Springfield");
  19.         var person2 = new Person("456 Oak St", "Shelbyville");
  20.         
  21.         person1.Address.Street = "789 Elm St"; // 影响了 person2 的 Address
  22.     }
  23. }
复制代码
在这个例子中,Address 是引用范例,因此对 person1.Address 的修改会影响到其他引用同一个 Address 对象的地方。
重构后:
  1. public struct Address
  2. {
  3.     public string Street { get; set; }
  4.     public string City { get; set; }
  5. }
  6. public class Person
  7. {
  8.     public Address Address { get; set; }
  9.     public Person(string street, string city)
  10.     {
  11.         Address = new Address { Street = street, City = city };
  12.     }
  13. }
  14. public class Program
  15. {
  16.     public static void Main()
  17.     {
  18.         var person1 = new Person("123 Main St", "Springfield");
  19.         var person2 = new Person("456 Oak St", "Shelbyville");
  20.         
  21.         person1.Address.Street = "789 Elm St"; // 不会影响 person2 的 Address
  22.     }
  23. }
复制代码
在重构后的代码中,Address 是一个值范例(struct),因此每次 Person 对象被创建时,Address 都会被复制,而不是引用共享。因此,对 person1.Address 的修改不会影响 person2.Address。
四、留意事项


五、总结

将引用范例更改为值范例重构通过将引用范例转换为值范例来简化代码设计,减少共享状态和副作用。它实用于那些不需要共享状态的场景,可以或许进步代码的可读性和可维护性,但也需要留意性能和设计方面的影响。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4