的方法,比方說,我有這行代碼:抽象類的方法覆蓋另一個抽象類
public abstract class User
{
public string name;
public string email;
public string password;
public abstract void Create();
public abstract void Remove();
public abstract void Modify();
}
然後又是抽象類:
public abstract class AbstractCustomer : User
{
public string address;
public Order order;
public abstract override void Create(string n,string e,string pa,int ph,string a);
public abstract override void Modify(string e, string pa, int ph, string a);
public abstract override void Remove(Order o);
public abstract void PlaceOrder(Item i);
public abstract void MakePayment(Order o);
}
,我們有客戶,它實現摘要客戶:
public class Customer : AbstractCustomer
{
public override void Create(string name, string email, string password, int phoneNum, string address)
{
this.name = name;
this.email = email;
this.password = password;
this.phoneNum = phoneNum;
this.address = address;
this.isActive = true;
ConnectionToDB.SaveCustToDB();
}
public override void Remove(Order order)
{
order.CancelOrder();
}
public override void Modify(string email, string password, int phoneNum, string address)
{
ConnectionToDB.UpdateCustInDB();
}
public override void PlaceOrder(Item item)
{
order = new Order(item);
}
public override void MakePayment(Order order)
{
ConnectionToDB.SavePayToDB(order);
}
}
這就是問題出現的地方(這是一個幫手類,它的目的e是調用容易的方法)
public static void Create(AbstractCustomer user, string name, string email, string password, int phoneNum, string address)
{
user.Create(name, email, password, phoneNum, address);
}
public static void Remove(AbstractCustomer user, Order order)
{
user.Remove(order);
}
public static void Modify(AbstractCustomer user, string email, string password, int phoneNum, string address)
{
user.Modify(email, password, phoneNum, address);
}
public static void PlaceOrder(AbstractCustomer user, Item item)
{
user.PlaceOrder(item);
}
public static void MakePayment(AbstractCustomer user, Order order)
{
user.MakePayment(order);
}
碼的這些線路會產生這樣的錯誤:
VS會告訴你,Customer類沒有實現用戶的抽象方法(當然,我認爲我做了,因爲我試圖在AbstractCustomer中重寫它)。但顯然,我們不需要在Abstract類中重寫它,因爲子類(Customer)會自動繼承它,並從那裏直接覆蓋方法。我發現這裏的解釋overriding abstract methods in an inherited abstract class
但是這樣做上述解決方案,它提供了另一個問題。 AbstractCustomer類將失去其用途,因此HelperClass無法調用任何方法,因爲其靜態類取決於將在方法中傳遞的AbstractCustomer。
所以對於問題:(問題:分組的方法分爲靜態類,我可以輕鬆地稱呼它)
- 是否有解決這種問題的方法(我? 「M使用Decorator模式)
- 如果我使用Decorator模式,什麼是ConcreteComponent的目的,在想什麼?是不是好,如果我刪除它?
- 如果我不使用裝飾模式,是否有任何模式可用於這種問題?
- 如果我不使用任何模式,有什麼辦法解決這個問題嗎?
感謝您的閱讀!很抱歉,因爲它長了一個! :)
首先,如果你想覆蓋的方法,該覆蓋方法必須具有相同的簽名基地之一(相同數量,順序和類型的論據)。這就是VS抱怨的原因。其次,我絕對沒有看到你的靜態類如何讓事情變得「容易」...... – 2014-12-08 08:19:49