c# - 传递3种不同数据类型来做同一件事的方法?

标签 c# oop data-structures

我认为标题可能是错误的..哈哈不确定..无论如何..

我有3种不同的数据类型。

public class data1
{
    public Color color;
    public int len;
    public DrawingVisual dv;
    Other vars...
}
public class data2
{
    public Color color;
    public int len;
    public DrawingVisual dv;
    Other vars different from data1 vars...
}


等等...

我该如何创建一个函数来传递这些变量,然后在函数内部获取所需的变量。
例..

void Something(var data)
{
    switch (typeof(data))
    {
         case data1:

         break;
         case data1:

         break;
    }
}


这显然不会工作..但这只是一个例子..

我实际上该怎么做?

谢谢

最佳答案

考虑创建类层次结构,并将方法移至该层次结构。基类:

public abstract class Data
{
    public Color color;
    public int len;
    public DrawingVisual dv;

    public abstract void Something();
}


还有两个派生类Data1和Data2:

public class Data1 : Data
{
    // Other vars...

    public override void Something()
    {
        // Use base class data and other vars
    }
}

public class Data2 : Data
{
    // Other vars different from Data1 vars

    public override void Something()
    {
        // different implementation
    }
}


现在,当您拥有这些类的实例时,您可以简单地在每个项目上调用Something,而无需尝试确定其类型。每个项目将具有完成操作所需的所有必需变量:

List<Data> items = // get list of Data1 and Data2
foreach(Data data in items)
    data.DoSomething();

关于c# - 传递3种不同数据类型来做同一件事的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17860152/

相关文章:

c# - 如何获取列表中字符串的平均出现次数

c++ - 指向类和函数的指针 - 问题

swift - Swift 中简单类的初始化程序出错

c++ - 编译器找不到结构,我应该包括什么

c - C中结构成员的运行时初始化(成员名称在运行时决定)

c# - 错误 : DEP0500 : The folder "...\Debug\AppX" could not be deleted. 访问路径 'resources.pri' 被拒绝

c# - 将颜色定义为静态资源

c# - 有没有办法为 UserPrincipal.FindByIdentity() 启用推荐追踪?

oop - Smalltalk 中的必需属性

java - Java Collections Framework 中常用方法(大小)的意外复杂性?