![](/img/trans.png)
[英]C# - with a reference to a base class, how can I access a property of the inherited class if I know that my reference is to the inherited class?
[英]C#. How can I use a method described in a base class with the arguments of inherited class?
让我们想象一下类的以下结构:
class A{
public double X;
public double Y;
public A(double x, double y){
X=x; Y=y;
};
public A MiddlePoint(A[] a){
A resultPnt = new A(0,0);
for (int i = 0; i < a.Length; i++){
resultPnt.X += a[i].X;
resultPnt.Y += a[i].Y;
}
resultPnt.X = (this.X + resultPnt.X)/(a.Length + 1);
resultPnt.Y = (this.Y + resultPnt.Y)/(a.Length + 1);
}
}
class B:A{}
使用这种方法是否安全:
B b = new B();
B[] arr = new B[2];
b.MiddlePoint(arr);
? 如果不是,除了在B类中重载此方法外,我应该怎么做才能使此方法安全? 每次在每个继承的类中重载此方法都是不方便的。
PS安全意味着在任何情况下都不会抛出异常。
是的,您的代码应在C#中运行。 (至少,一旦向A
添加无参数构造函数,类似的东西就会在我的计算机上的C#4.0下编译。)
书面将返回的实例代码A
中的任何亚型的数组过去了A
。 例如,如果您坚持要在传递B
数组时取回B
的实例,则可以使用泛型,类似于以下内容:
class A{
public double X;
public double Y;
public A(double x, double y){
X=x; Y=y;
}
public A(){
// needs to have a no-arg constructor to satisfy new() constraint on MiddlePoint
}
public T MiddlePoint<T>(T[] a) where T : A, new() {
T resultPnt = new T();
for (int i = 0; i < a.Length; i++){
resultPnt.X += a[i].X;
resultPnt.Y += a[i].Y;
}
resultPnt.X = (this.X + resultPnt.X)/(a.Length + 1);
resultPnt.Y = (this.Y + resultPnt.Y)/(a.Length + 1);
}
}
class B:A{}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.