2008-12-12 36 views
5

Tôi muốn có chế độ xem tóm tắt cho bất kỳ loại giao diện người dùng nào (web hoặc cửa sổ). Để làm được điều đó, tôi phải sử dụng Giao diện (IView), trong đó tôi chỉ có thể áp dụng các quy tắc về chế độ xem. Trong thực tế, tôi muốn thiết lập một số chức năng comple cơ bản để cung cấp cho thừa kế của nó.Giao diện hoặc Lớp tóm tắt để đáp ứng yêu cầu

Vì vậy, theo cách này, tôi phải sử dụng lớp trừu tượng. Vấn đề là

1) Giao diện chỉ có những quy định 2) Quan điểm (mẫu web hoặc dạng cửa sổ) không thể kế thừa nữa kể từ đó đã được thừa hưởng từ cửa sổ hoặc web dạng

Làm thế nào tôi có thể làm điều đó? Rất cám ơn

Trả lời

5

Các chức năng bạn thêm sẽ thay đổi định nghĩa của lớp đó hay bạn chỉ đơn giản là tạo các hàm để thao tác dữ liệu đã là một phần của lớp?

Nếu bạn cần xác định lại các khía cạnh của lớp cơ sở của hai lớp này thì có, bạn sẽ cần phải thay đổi cấu trúc thừa kế của bạn. Nhưng nếu các hàm sẽ đơn giản thao tác dữ liệu đã là một phần của lớp bây giờ thì tôi sẽ đề nghị bạn sử dụng giao diện và tạo các hàm tiện ích.

Dưới đây là một ví dụ vụng về của những gì tôi có nghĩa là:

using System; 

abstract class Pet { } 

class Dog : Pet, IPet 
{ 
    public String Name { get; set; } 
    public Int32 Age { get; set; } 
} 

class Cat : Pet, IPet 
{ 
    public String Name { get; set; } 
    public Int32 Age { get; set; } 
} 

interface IPet 
{ 
    String Name { get; set; } 
    Int32 Age { get; set; } 
} 

static class PetUtils 
{ 
    public static void Print(this IPet pet) 
    { 
     Console.WriteLine(pet.Name + " is " + pet.Age); 
    } 
} 

hai lớp UI của bạn đang có lẽ liên quan theo cách này. Tôi sẽ tưởng tượng rằng những gì bạn cần làm trong một thời trang cắt ngang sẽ được giải quyết bằng một phương pháp tiện ích giống như phương pháp tôi đã tạo ra. Tôi đã tạo ra phương thức PetUtils.Print như một phương thức mở rộng vì điều này sẽ tạo ra ảo giác biểu cảm của một phương thức thể hiện. Nếu bạn không sử dụng C# 3, chỉ cần xóa "this" từ public static void Print(this IPet pet).

4

Bạn có thể kế thừa một lớp cụ thể (biểu mẫu web/biểu mẫu cửa sổ), khai báo lớp trừu tượng của bạn và vẫn triển khai giao diện.

dụ System.Web.UI.Page:

public interface IView 
{ 
    void Foo(); 
} 

public abstract class BasePage : Page, IView 
{ 
    //honor the interface 
    //but pass implementation responsibility to inheriting classes 
    public abstract void Foo(); 

    //concrete method 
    public void Bar() 
    { 
     //do concrete work 
    } 
} 

public class ConcretePage : BasePage 
{ 
    //implement Foo 
    public override void Foo() { } 
} 

này mang lại cho bạn những lợi ích của giao diện và phương pháp bê tông Bar();

0

những gì tôi muốn làm là một cái gì đó như thế này

Công MustInherit Lớp ControllerBase (Tất M Như {ModelBase, New}, V Như {IView})

Inherits BaseController 

Dim model As M 
Dim view As V 
Public Sub New() 
    model = New M 
    view.Controller = Me 
    model.Controller = Me 
End Sub 
Public Overridable Function GetModel() As M 
    Return model 
End Function 
Public Overridable Function GetView() As V 
    Return view 
End Function 

End Class

Public Class BaseWindow

Inherits System.Windows.Forms.Form 
Implements IView 
Dim c As BaseController 

Public Function GetController() As BaseController 
    Return c 
End Function 

Friend WriteOnly Property Controller() As BaseController Implements IView.Controller 
    Set(ByVal value As BaseController) 
     c = value 
    End Set 
End Property 

End Class

Public Class BaseWeb 
Inherits System.Web.UI.Page 
Implements IView 

Dim c As BaseController 

Public Function GetController() As BaseController 
    Return c 
End Function 

Friend WriteOnly Property Controller() As BaseController Implements IView.Controller 
    Set(ByVal value As BaseController) 
     c = value 
    End Set 
End Property 

End Class

Interface Công IView

WriteOnly Property Controller() As BaseController 

Interface End

Các vấn đề liên quan