我有一个C#
类Point
,其中有两个子类ColorPoint
和AmountPoint
。
点级
public class Point
{
double x; // Position x
double y; // Position y
public Point(double pos_x, double pos_y) // Constructor
{
this.x = pos_x;
this.y = pos_y;
}
}
public class ColorPoint : Point
{
double color; // White value (0 to 255)
}
public class AmountPoint : Point
{
int amount; // Amount of Persons standing at this point
}
现在我想要两件事。
我想有一个AdaptMeshPoints
同时接受ColorPoint
和AmountPoint
输入列表的方法,并且我可以更改这两个参数的公用参数({ {1}})
我想告诉方法Point
,应该打印出子类的哪个参数。
这应该看起来像这样:
AdaptMeshPoints
答案 0 :(得分:4)
即使您的问题同时标有C#和Java,我还是从问题中的文本中假定这是C#。
要设置pointList[0].x
,您需要告诉编译器T
始终是Point
(或继承自where T : Point
)。使用通用类型约束(public main()
{
List<ColorPoint> colorList = new List<ColorPoint>(4);
AdaptMeshPoints(colorList, x => x.color.ToString());
}
public List<T> AdaptMeshPoints<T>(List<T> pointList, Func<T, string> whatToPrint)
where T : Point
{
pointList[0].x = 45;
Console.WriteLine(whatToPrint(pointList[0]));
}
)。
您还可以传递一个委托来描述您要打印的属性:
SELECT
p.first_name, p.last_name, COUNT(r.movie_id) as working_number
FROM
person p
LEFT JOIN
roles r ON r.person_id = p.id
WHERE
r.movie_id IN (SELECT
r.movie_id
FROM
roles r
WHERE
role_type = 'Director'
AND person_id = (SELECT
id
FROM
person
WHERE
first_name = 'Quentin'
AND last_name = 'Tarantino'))
and r.role_Type = "Actor"
GROUP BY p.id;
答案 1 :(得分:1)
要1。创建一个使用Point []的函数。如果“不存在数据丢失的危险”并且适用于这种多态情况,则自动进行转换。
(我不确定这是多态的还是属于协方差和相反方差的区域,我不确定100%。但是这里的规则有意地非常相似)。
至2。这至少可以通过以下方式解决:
所以您必须“选择自己的位置”。