重构:在 C# 中提取接口
Refactoring: Extracting interface in C#
我正在尝试为 BeamsCollection
和 ColumnsCollection
提取接口 IObjectsCollection
。但是我卡住了。
Beam
和 Column
均派生自 SObject
class。
public class BeamsCollection : IObjectsCollection
{
public List<Beam> SObjects{ get; private set; }
public BeamsCollection ()
{
SObjects = new List<Beam>();
}
public void Add(Beam beam)
{
SObjects.Add(beam);
}
}
public class ColumnsCollection : IObjectsCollection
{
public List<Column> SObjects{ get; private set; }
public ColumnsCollection ()
{
SObjects= new List<Column>();
}
public void Add(Column column)
{
SObjects.Add(column);
}
}
public interface IObjectsCollection
{
List<SObject> SObjects{ get; }
void Add(SObject sobject);
}
您可能想要这样的东西:
public interface IObjectsCollection<T> where T : SObject
{
List<T> Items{ get; }
void Add(T item);
}
public class BeamsCollection : IObjectsCollection<Beam>
{
public List<Beam> Items { get; private set; }
public BeamsCollection ()
{
Items = new List<Beam>();
}
public void Add(Beam item)
{
Items.Add(beam);
}
}
public class ColumnsCollection : IObjectsCollection<Column>
{
public List<Column> Items { get; private set; }
public ColumnsCollection ()
{
Items = new List<Column>();
}
public void Add(Column item)
{
Items.Add(column);
}
}
或者,您可以只定义一个泛型 class,这样您就不需要继续添加 IObjectsCollection
的新实现
public class MyObjectsCollection<T> where T : SObject
{
//....rest of class ommitted.
}
然后使用它:
MyObjectsCollection<Beam> m1 = new MyObjectsCollection<Beam>();
m1.Items.Add(new Beam());
MyObjectsCollection<Column> m2 = new MyObjectsCollection<Column>();
m2.Items.Add(new Column());
我正在尝试为 BeamsCollection
和 ColumnsCollection
提取接口 IObjectsCollection
。但是我卡住了。
Beam
和 Column
均派生自 SObject
class。
public class BeamsCollection : IObjectsCollection
{
public List<Beam> SObjects{ get; private set; }
public BeamsCollection ()
{
SObjects = new List<Beam>();
}
public void Add(Beam beam)
{
SObjects.Add(beam);
}
}
public class ColumnsCollection : IObjectsCollection
{
public List<Column> SObjects{ get; private set; }
public ColumnsCollection ()
{
SObjects= new List<Column>();
}
public void Add(Column column)
{
SObjects.Add(column);
}
}
public interface IObjectsCollection
{
List<SObject> SObjects{ get; }
void Add(SObject sobject);
}
您可能想要这样的东西:
public interface IObjectsCollection<T> where T : SObject
{
List<T> Items{ get; }
void Add(T item);
}
public class BeamsCollection : IObjectsCollection<Beam>
{
public List<Beam> Items { get; private set; }
public BeamsCollection ()
{
Items = new List<Beam>();
}
public void Add(Beam item)
{
Items.Add(beam);
}
}
public class ColumnsCollection : IObjectsCollection<Column>
{
public List<Column> Items { get; private set; }
public ColumnsCollection ()
{
Items = new List<Column>();
}
public void Add(Column item)
{
Items.Add(column);
}
}
或者,您可以只定义一个泛型 class,这样您就不需要继续添加 IObjectsCollection
public class MyObjectsCollection<T> where T : SObject
{
//....rest of class ommitted.
}
然后使用它:
MyObjectsCollection<Beam> m1 = new MyObjectsCollection<Beam>();
m1.Items.Add(new Beam());
MyObjectsCollection<Column> m2 = new MyObjectsCollection<Column>();
m2.Items.Add(new Column());