這是我在代碼下寫的錯誤注釋。我不允許以另一種方式進行它應該是兩個類,并且應該以這種方式完成。如果有人可以幫助我,我將不勝感激,謝謝
using System;
using MathLibrary;
namespace MathLibraryApp
{
class Program
{
static void Main(string[] args)
{
Vector v = new Vector();
Vector v1 = new Vector(4, 8, 12);
Vector v2 = new Vector(8,16,24);
Vector[] vectors = { v1, v2 };
Console.WriteLine(v.Add(vectors));
}
}
}
using System;
namespace MathLibrary
{
public class PointVectorBase
{
public PointVectorBase(double x=0 , double y=0 , double z=0 )
{
this.X = x;this.Y = y;this.Z = z;
}
protected virtual PointVectorBase CalculateSum(params Vector[] addends)
{
for (int i = 0; i < addends.Length; i )
{
this.X = this.X addends[i].X;
this.Y = this.Y addends[i].Y;
this.Z = this.Z addends[i].Z;
}
return this;
}
}
public class Vector : PointVectorBase
{
public Vector(double x = 0, double y = 0, double z = 0) : base(x, y, z){ }
public Vector Add(params Vector[] addends)
{
return this.CalculateSum(addends) ;
//Cannot implicitly convert type MathLibrary.PointVectorBase to MathLibrary.Vector. An explicit conversion exists (are you missing a cast?)
}
}
}
uj5u.com熱心網友回復:
您的方法CalculateSum回傳值型別PointVectorBase。AddVector 類中的方法應回傳Vector.
由于繼承,您可以將 CalculateSum 的結果轉換為 Vector 以便回傳this.CalculateSum(addends) as Vector;
uj5u.com熱心網友回復:
您可以像這樣轉換結果:
public Vector Add(params Vector[] addends)
{
return this.CalculateSum(addends) As Vector;
}
不過這很危險。并非所有基向量都是向量,因此您可能會回傳空值。與public class cat: animal示例中的動物并不總是貓一樣。
創建隱式轉換更安全,但并非總是可行:https : //docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/user-defined-conversion-operators
uj5u.com熱心網友回復:
在這種情況下,我不會去繼承。您只是使用方法擴展基類。
您的CalculateSum 上的問題是您將其作為結果回傳。這是一個奇怪的模式。要么選擇一個改變當前實體的 void 方法,要么回傳一個新實體(所以不要修改當前實體)。我會選擇后者。
如果您的問題是關于繼承,這不是您提供的好例子。
但如果你想要另一種方式:
在您的示例中,我會使用擴展方法。這也是使用結構體的一個很好的例子。通過撰寫擴展方法,您可以使用額外的方法擴展 Vector3..
using System;
namespace MathLibrary
{
public struct Vector3
{
public double X;
public double Y;
public double Z;
public Vector3(double x=0 , double y=0 , double z=0 )
{
this.X = x;
this.Y = y;
this.Z = z;
}
public Vector3 CalculateSum(params Vector3[] addends)
{
var result = new Vector3();
for (int i = 0; i < addends.Length; i )
{
result.X = result.X addends[i].X;
result.Y = result.Y addends[i].Y;
result.Z = result.Z addends[i].Z;
}
return result;
}
}
public static class VectorExtensions
{
public static Vector3 Add(this Vector3 vector, params Vector3[] addends)
{
return vector.CalculateSum(addends);
// the add should actually add to the current vector,
// which makes it less readable.. calculate sum and add is almost the same.
return vector.CalculateSum(
new Vector3 [] { vector }
.Concat(addends)
.ToArray() );
}
}
}
您的代碼越具有函式式方法,發生的奇怪事情就越少。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/333798.html
上一篇:物體框架腳手架和遷移不起作用
