我有很多类存储不同类型的数据,但操作数据的方式不同。有什么事情我可以抽象出我正在使用的课程......并且只是调用课程的方法吗?我将有一个我在特定时刻使用的对象,即masterclass。
例如,我有class1和class2。这两个类都可以做.add .subtract ...等。
我想说... masterclass现在是class1。所以我可以做masterclass.add而不是class1.add。然后将masterclass更改为class2并执行masterclass.subtract而不是class1.subtract。
class cat
{
String legs="4 legs";
String claws="cat has lots of claws";
public string GetLegs()
{ return legs+claws;
}
}
class bird
{
String legs="2 wings";
String talons="Bird has 2 talons";
public string GetLegs()
{ return legs+talons;
}
}
class animal;
mainfunction()
{
string temp;
animal = cat;
temp = animal.GetLegs();
animal = bird;
temp = animal.getLegs();
}
答案 0 :(得分:3)
您可以通过多种方式执行此操作,要么使用接口,要么实现它,例如:
public interface ICalculate {
void Add();
void Subtract();
}
以你从接口继承的方式实现你的类,如下所示:
public class SpecificClass : ICalculate {
public void Add() {
// ...
}
public void Subtract() {
// ...
}
}
public class OtherSpecificClass : ICalculate {
public void Add() {
// ...
}
public void Subtract() {
// ...
}
}
或者你可以使用像:
这样的抽象基类public abstract class AbstractCalculate {
public abstract void Add();
public abstract void Subtract();
}
并实现特定的类,如:
public class SpecificCalculate : AbstractCalculate {
public override void Add() {
// ...
}
public override void Subtract() {
// ...
}
}
在第一个示例中,您可以创建特定的类,如:
ICalculate calc1 = new SpecificCalculate();
并致电
calc1.Add();
在第二个中,您可以使用
AbstractCalculate calc11 = new SpecificCalculate();
并致电
calc1.Add();
两者都有类似的工作方式,两者都有其优点
您可以在MSDN
上找到更多信息根据Ed Plunkett的建议,您可以在后面进行实施(假设为ICalculate
版本)
IList<ICalculate> calculations = new List<ICalculate>();
// <-- add specific instances to the list
calculations.Add( new SpecificClass() );
calculations.Add( new OtherSpecificClass() );
// iterate the list
foreach (var calculation in calculations) {
calculation.Add();
}
或更具体地针对您更新的问题
public interface IAnimal {
int GetLegs();
}
public class Bird : IAnimal {
public int GetLegs() {
return 2;
}
}
public class Cat : IAnimal {
public int GetLegs() {
return 4;
}
}
,程序会像
一样使用它class Program {
static int GetLegs(IAnimal animal) {
return animal.GetLegs();
}
static void Main(string[] args) {
Cat cat = new Cat();
Bird bird = new Bird();
Console.WriteLine( GetLegs( bird ) ); // 2
Console.WriteLine( GetLegs( cat ) ); // 4
}
}
或者喜欢
IList<IAnimal> animals = new List<IAnimal>();
animals.Add( new Cat() );
animals.Add( new Bird() );
int totalLegs = 0;
foreach (var animal in animals) {
totalLegs += animal.GetLegs(); // or totalLegs += GetLegs( animal );
}
Console.WriteLine( totalLegs ); // 6