我认为标题可能有误......哈哈不确定..反正..
我有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;
}
}
这显然不会起作用..但它只是一个例子......
我怎么能真正做到这一点?
由于
答案 0 :(得分:7)
考虑创建类层次结构,并将方法 Something 移动到该层次结构。基类:
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();
答案 1 :(得分:1)
您可以使用object
代替var
void Something(object data)
{
if(typeof(data) == data1.GetType())
{
}
else
if(typeof(data) == data2.GetType())
{
}
}
您的类似乎具有可以使用继承的公共属性。创建一个基本抽象类并继承它。
public abstract class Data
{
public Color color;
public int len;
public DrawingVisual dv;
public abstract void Something();
}
public class Data1 : Data
{
//Addition methods go here
}
public class Data2 : Data
{
//Addition methods go here
}
作为补充说明,我假设您将使用属性和类等的命名约定。
答案 2 :(得分:1)
首先,您可能需要重新考虑使用公共字段并使用公共属性。您可以考虑两个选项。
实施共享界面
考虑到你的类具有相同的属性,你可以有一个接口:
public interface IData
{
Color color {get;set;}
int len {get;set;}
DrawingVisual dv {get;set;}
}
public interface Data1
{
public Color color {get;set;}
public int len {get;set;}
public DrawingVisual dv {get;set;}
}
public interface Data2
{
public Color color {get;set;}
public int len {get;set;}
public DrawingVisual dv {get;set;}
}
void Something(IData data)
{
// use the properties defined in the IData interface
}
Something(new Data1());
Something(new Data2());
使用方法重载
void Something(data1 data)
{
// Do something specific using data1 class
}
void Something(data2 data)
{
// Do something specific using data2 class
}
Something(new data1());
Something(new data2());
我建议使用第一个选项。