如何让ClassN类实现IName接口,将int类型N转为string类型Name?
实现方案:让ClassN满足IName接口要求
当然可以实现,这里提供两种常见的解决思路:
方案1:直接修改ClassN实现IName接口
如果有权限修改ClassN的代码,直接让它实现IName接口,在Name属性的逻辑里完成类型转换即可:
public class ClassN : IName { public int N { get; set; } // 实现IName接口的Name属性 public string Name { get => N.ToString(); set { // 增加转换校验,避免无效输入报错 if (int.TryParse(value, out int num)) N = num; else throw new ArgumentException("无法将输入字符串转换为整数", nameof(value)); } } }
使用示例:
var obj = new ClassN { N = 2 }; Console.WriteLine(obj.Name); // 输出 "2" obj.Name = "100"; Console.WriteLine(obj.N); // 输出 100
方案2:用适配器类包装ClassN(无需修改原类)
如果ClassN是第三方库类、无法修改源码,可以写一个适配器类,包装ClassN实例并实现IName接口:
public class ClassNNameAdapter : IName { private readonly ClassN _target; public ClassNNameAdapter(ClassN target) { _target = target ?? throw new ArgumentNullException(nameof(target)); } public string Name { get => _target.N.ToString(); set { if (int.TryParse(value, out int num)) _target.N = num; else throw new ArgumentException("输入字符串不是有效的整数", nameof(value)); } } }
使用示例:
var classN = new ClassN { N = 2 }; IName nameObj = new ClassNNameAdapter(classN); Console.WriteLine(nameObj.Name); // 输出 "2" nameObj.Name = "50"; Console.WriteLine(classN.N); // 输出 50
如果只需要Name的读取功能、不需要写入,可以把set逻辑改成抛出NotSupportedException,或者根据需求简化。
内容的提问来源于stack exchange,提问作者Filipe
相关产品推荐
相关产品推荐

