代码重构 C#
本文关键字:重构 代码 | 更新日期: 2023-09-27 18:36:25
我正在开发一个小应用程序来掌握 C#,我已经编写了一个小应用程序,它当前将项目的值相加(当前预定义) 这是我到目前为止所拥有的:
//Defining classes
public class Item1{
public string Type{get{return "Item1";}}
}
public class Item2{
public string Type{get{return "Item2";}}
}
//Methods
public void CalcItems(Item1 item1, int val){
this.Log(item1.Type + "Val:" + val);
this.total += val;
}
public void CalcItems(Item2 item2, int val){
this.Log(item2.Type + "Val:" + val);
this.total += val;
}
//Calling these methods
Items.CalcItems(new Item1(), 30);
Items.CalcItems(new Item2(), 12);
如何通过一种计算方法传递第 1 项和第 2 项?
使用Interface
:
public interface IItem
{
string Type { get; }
}
然后在类声明上实现接口:
public class Item1 : IItem
{
...
public string Type { get; }
...
}
public class Item2 : IItem
{
...
public string Type { get; }
...
}
现在我们可以将方法CalcItems()
定义为接受IItem
参数:
public void CalcItems(IItem item, int val)
{
this.Log(item1.Type + "Val:" + val);
this.total += val;
}
这样,以下内容现在将引用相同的方法:
Items.CalcItems(new Item1(), 30);
Items.CalcItems(new Item2(), 12);
向项目添加一个 IItem 接口,并将 Calcitems 中的 Item1 替换为 iitem。那么你不需要两个计算项目
您可以为Item1
和Item2
定义一个接口,因为它们都共享公共属性Type
。
MSDN:接口(C# 编程指南)
public interface IMyItem
{
string Type;
}
public class Item1 : IMyItem
{
public string Type{get{return "Item1";}}
}
public class Item2: IMyItem
{
public string Type{get{return "Item2";}}
}
public void CalcItems(IMyItem item, int val){
this.Log(item.Type + "Val:" + val);
this.total += val;
}
Items.CalcItems(new Item1(), 30);
Items.CalcItems(new Item2(), 12);
你可以
使用泛型。为 Item 对象定义一个接口,并声明该方法,如下所示:
void CalcItems<T>(T item, int val) where T : IItem
您可以使用策略设计模式进行重构。声明一个接口并将该接口实现到 Item1 和 Item2 类。使用该接口执行计算操作。
public interface IItem {
string Type { get; }
}
public class Item1: IItem {
public string Type{get{return "Item1";}}
}
public class Item2: IItem {
public string Type{get{return "Item2";}}
}
public void CalcItems(IItem item, int val){
this.Log(item.Type + "Val:" + val);
this.total += val;
}
Items.CalcItems(new Item1(), 30);
Items.CalcItems(new Item2(), 12);