Hiện tại tôi đang cố tạo một loại mô hình trong vb.net có thể được sử dụng để tạo/tìm nạp các mục nhập cơ sở dữ liệu.Phương pháp "ghi đè" các Thành viên được chia sẻ trong các lớp con
Tôi đã tạo Mô hình lớp chính với chức năng được chia sẻ để tìm nạp các tập dữ liệu, ví dụ: Model.find(). Bây giờ tôi muốn tạo Lớp học kế thừa Lớp mô hình chính, ví dụ: một riêng biệt cho người dùng: UserModel.find() => "SELECT * FROM users".
Điều tôi cần bây giờ là tìm cách cho Lớp biết nên sử dụng bảng nào. Tôi nghĩ về một chuỗi "bảng" trừu tượng là một hằng số trong mỗi "mô hình con", nhưng làm thế nào điều này có thể được thực hiện vì nó không thể ghi đè lên các thành viên được chia sẻ?
Cảm ơn trước!
Sửa: Có lẽ điều này sẽ làm cho nó rõ ràng hơn một chút những gì tôi có nghĩa là:
Public Class Model
Public Shared _controller As Controller
Public Shared table As String
Protected Shared tableFields As String()
Shared reader As Npgsql.NpgsqlDataReader
Public Shared Function find()
Dim a As ArrayList = New ArrayList
'Test if the tablefields are already known to the class, if not, get them
If tableFields Is Nothing Then
getTableFields()
End If
Dim query As String = "SELECT " + String.Join(", ", tableFields) + " FROM " + table
reader = _controller.executeReader(query)
While reader.Read
o = New Model
Dim v As New Hashtable
For Each field In tableFields
v(field) = reader(field)
Next
o.values = v
a.Add(o)
End While
reader.Close()
Return DirectCast(a.ToArray(GetType(Model)), Model())
End Function
Public values As Hashtable
Public Sub New()
End Sub
End Class
Vì vậy, tôi muốn có một phương pháp chia sẻ mà tìm tất cả các mục cơ sở dữ liệu và phản hồi lại một loạt các trường hợp của kiểu riêng của mình, ví dụ Mô hình(). Đó là lý do tại sao tôi muốn giữ cho phương pháp tìm được chia sẻ và không bị ràng buộc với một cá thể.
Đó là những gì tôi đã thử trước đây, vấn đề là, tôi cần tên bảng trong phương thức được chia sẻ và không thể khai báo chức năng được chia sẻ công khai là ghi đè/ghi đè. Hay tôi đã hiểu sai mã của bạn? – stex
Hàm getTableName không được chia sẻ - nó là phương thức thể hiện "bình thường", phải được ghi đè bởi các lớp con. Mỗi lớp con ghi đè phương thức này trả về một biến chia sẻ riêng (hoặc một hằng số cấp lớp, nếu có thể). Mọi trường hợp của Class1 sẽ trả về cùng một TableName, mặc dù thực tế là getTableName là một phương thức thể hiện chứ không phải phương thức chia sẻ. Ý tưởng là làm cho một phương thức instance hoạt động như một phương thức chia sẻ khi được kích hoạt (trả về cùng một giá trị/tham chiếu, bất kể phương thức của instance nào được gọi), trong khi vẫn giữ các lợi ích của việc ghi đè trong các lớp con. –
Vâng, tôi hiểu. Nhưng tôi không muốn tạo một thể hiện của Class1, tôi muốn Class1 biết về tên bảng mà không cần tạo một đối tượng. – stex