2024-10-08 父層virtual和子層override

在其他類別程式(.cs 文件中),如果該類別繼承了這個 TableDao<T> 類別,那麼你可以選擇覆寫(override)這個 Query 方法,而不必遵循父層的原始實作方式。這是因為 Query 方法被標記為 virtual,這表示它是虛擬方法,允許子類別根據需求來覆寫它。

如何覆寫 Query 方法

當你在子類別中繼承了 TableDao<T>,你可以使用 override 關鍵字來覆寫這個方法。這樣,你可以根據特定的需求定制自己的查詢邏輯。

例如,假設你有一個名為 CustomerDao 的類別,它繼承自 TableDao<Customer>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class CustomerDao : TableDao<Customer>
{
public CustomerDao(IRepository repository) : base(repository) { }

// 覆寫 Query 方法
public override IEnumerable<Customer> Query(Customer inputVo)
{
// 自己的查詢邏輯,這裡你可以改寫為任何適合的查詢
StringBuilder customQuery = new StringBuilder("SELECT * FROM Customers WHERE 1=1 ");

if (!string.IsNullOrEmpty(inputVo.Name))
{
customQuery.AppendLine("AND Name = @Name");
}

// 更多的查詢條件...

return _repository.Connection().Query<Customer>(customQuery.ToString(), inputVo);
}
}

注意事項

  • **virtualoverride**:

    • 在父類別中,Query 方法使用了 virtual,表示這個方法可以被覆寫。
    • 在子類別中,你需要使用 override 關鍵字來實作自己的版本,這樣子類別中的 Query 方法就會取代父類別中的實作。
  • 靈活性

    • 你可以根據具體的需求來覆寫 Query 方法,例如添加更多的查詢條件、不同的過濾方式、特定的商業邏輯等。
    • 如果某些情況下你不需要覆寫,可以直接使用父類別的 Query 方法,繼承父類別的查詢邏輯。

總結

  • 父類別中的 Query 方法被標記為 virtual,這意味著它可以被覆寫。
  • 在子類別中,你可以選擇覆寫 Query 方法,使用 override 關鍵字來實現你自己的查詢邏輯。
  • 這樣做的好處是,你可以根據具體的需求靈活改變查詢的行為,而不必受限於父類別的方法實作。

所以,答案是對的,當你在子類別中繼承這個 Query 方法時,你可以不依照父層的寫法,而是根據自己的需求來撰寫覆寫的查詢方法。