2008-12-12 11 views
5

मैं किसी भी प्रकार के यूआई (वेब ​​या विंडो) के लिए एक सार दृश्य देखना चाहता हूं। ऐसा करने के लिए मुझे इंटरफ़ेस (IView) का उपयोग करना होगा जिसमें मैं केवल दृश्य के नियमों को लागू कर सकता हूं। असल में, मैं अपने उत्तराधिकार प्रदान करने के लिए कुछ बुनियादी पूर्ण कार्य निर्धारित करना चाहता हूं।आवश्यकता को पूरा करने के लिए इंटरफेस या सार कक्षा

तो इस तरह, मुझे अमूर्त वर्ग का उपयोग करना होगा। समस्या यह है

1) इंटरफ़ेस केवल नियम 2) (वेब ​​प्रपत्र या खिड़की फार्म) दृश्य है किसी भी अधिक के वारिस नहीं कर सकते हैं के बाद से पहले से ही खिड़की या वेब फ़ॉर्म से विरासत में मिली है

मैं ऐसा कैसे कर सकता है? बहुत धन्यवाद

उत्तर

5

क्या आपके द्वारा जोड़े गए कार्यों की कक्षा में परिभाषा की परिभाषा बदल जाएगी, या आप केवल कक्षा का हिस्सा होने वाले डेटा में हेरफेर करने के लिए फ़ंक्शंस बना रहे हैं?

यदि आपको इन दो कक्षाओं के बेस क्लास के पहलुओं को फिर से परिभाषित करने की आवश्यकता है तो हाँ, आपको अपनी विरासत संरचना को बदलने की आवश्यकता होगी। लेकिन यदि फ़ंक्शंस केवल उस डेटा का उपयोग करेगा जो पहले से ही कक्षा का हिस्सा है तो मैं आपको इंटरफ़ेस का उपयोग करने और उपयोगिता कार्यों को बनाने का सुझाव दूंगा।

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); 
    } 
} 

आपका दो यूआई कक्षाएं शायद इस तरह से संबंधित हैं:

यहाँ मैं क्या मतलब है की एक अनाड़ी उदाहरण है। मैं कल्पना करता हूं कि क्रॉस-कटिंग फैशन में आपको जो करना है, उसे एक यूटिलिटी विधि द्वारा हल किया जाएगा जैसा मैंने बनाया है। मैंने PetUtils.Print विधि को विस्तार विधि के रूप में बनाया है क्योंकि यह एक उदाहरण विधि के अभिव्यक्तिपूर्ण भ्रम पैदा करेगा। यदि आप सी # 3 का उपयोग नहीं कर रहे हैं तो public static void Print(this IPet pet) से बस "this" हटा दें।

4

आप एक ठोस वर्ग (वेब ​​फॉर्म/विंडो फॉर्म) का उत्तराधिकारी हो सकते हैं, अपनी कक्षा सार घोषित कर सकते हैं, और अभी भी एक इंटरफ़ेस लागू कर सकते हैं।

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() { } 
} 

यह आपको इंटरफेस के लाभ और ठोस विधि बार (देता है);

0

क्या मैं करना चाहता हूँ इस

लोक MustInherit कक्षा ControllerBase (एम के रूप में की {ModelBase, न्यू}, वी के रूप में {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 

समाप्ति क्लास है

लोक कक्षा 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 

समाप्ति कक्षा

+०१२३५१६४१०६
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 

समाप्ति कक्षा

सार्वजनिक इंटरफ़ेस IVIEW

WriteOnly Property Controller() As BaseController 

अंत इंटरफ़ेस

संबंधित मुद्दे