首页 > 代码库 > 设计模式之读写装饰
设计模式之读写装饰
今天有人问我如下代码:
1 public class UserInformation2 {3 public string Name { get; set; }4 5 public uint Age { get; internal set; }6 }
UserInformation.Age 这个代码在A程序集里面可以,但是在B程序集里面却无法使用了,如何解决?
其实这个问题本质跟设计模式有关系,internal 在C#中是程序集内可访问的修饰符.
因此我想到了第一种方案:
1 public class UserInformation 2 { 3 public string Name { get; internal set; } 4 5 public uint Age { get; set; } 6 7 public void SetName(string name) 8 { 9 Name = name;10 }11 }
有点儿Java的风格,并不喜欢。考虑了第二中方案:
1 public interface IInformation 2 { 3 string Name { get; } 4 5 uint Age { get; } 6 } 7 8 public interface IMutableInformation : IInformation 9 {10 new string Name { set; }11 12 new uint Age { set; }13 }
那么,实体类的实现如下:
1 public class UserInformation : IInformation , IMutableInformation 2 { 3 private string _Name = string.Empty; 4 private uint _Age = default(uint); 5 6 public string Name { get { return _Name; } } 7 8 public uint Age { get { return _Age; } } 9 10 string IMutableInformation.Name11 {12 set { _Name = value; }13 }14 15 uint IMutableInformation.Age16 {17 set { _Age = value; }18 }19 }
下面,我就开始调用它了:
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 6 A.UserInformation information = new A.UserInformation(); 7 A.IMutableInformation mutableInformation = information; 8 mutableInformation.Name = "张三丰"; 9 mutableInformation.Age = 102;10 11 Console.WriteLine(information.Name);12 Console.WriteLine(information.Age);13 14 // information.Name = "张三丰"; // 这样,此处编译的时候会出错,你需要用【IMutableInformation】接口 给【A.UserInformation】赋值.15 16 Console.ReadLine();17 }18 }
就介绍到这里了....
设计模式之读写装饰
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。