2014-04-24 52 views
0

我是屬性編程新手。不知道我是否在問正確的問題。用C編寫屬性#

我有一個抽象基類(AbstarctBase)和兩個驅動類Derived1和Derived2。 我的AbstartBase類有兩個方法Method1和Method2。

是否可以使用屬性編程,這樣,當我做到這一點

AbstractBase ab= new Derived1(); 

我只得到Method1訪問,當我使用Derived2類我只得到Method2訪問。

這是可能的。如果是的話,那麼你可以給我一個例子來開始。

+3

什麼是「屬性編程」?無論如何,「不」 - 不是那樣。這是因爲'AbstractBase'具有*兩個*方法定義(因此,所有派生類都繼承了這些方法)。如果你只想在特定派生類中使用它,請在那裏聲明它。如果您只是希望讓外部代碼看不到基本方法,您可以使用足夠的可見性修飾符 - 例如'protected'。 – user2864740

+1

在你的情況下,一個界面會更好,這樣你就可以公開你想要看到的方法並且讓它隱藏起來 – Gusman

回答

0

我想你是鏈接兩個不同的概念,無論是多態還是屬性。在你遇到問題的情況下,你可以做的是讓Inerface擁有一個方法,並且在你的派生類中實現的方式與使用多態派來調用你需要的實現不同。例如

public interface IBase 
    { 
     void Foo(); 
    } 

    public class Derived1: IBase 
    { 
     public void Foo() 
     { 
     //Print Derived 1 
     } 
    } 

    public class Derived2: IBase 
    { 
     public void Foo() 
     { 
     //Print Derived 2 
     } 
    } 

    public class Program 
    { 
    public static void Main(String args[]) 
    { 
     IBase base=new Derived1(); 
     base.Foo();//This prints Derived 1 
     base=new Derived2(); 
     base.Foo();//This prints Derived 2 
    } 
    } 

凡在C#屬性用於元數據附加到類或類成員,以及施加共同行爲時,而無需執行對每個共享該行爲單元某個接口。他們使用像這樣

[MyAttribute] 
    public class MyClass 
    { 
     //Class body 
    } 

您需要使用GetCustomAttribute()方法,否則它不會做任何事情來調用屬性。有關屬性的更多信息,請參閱此文章 http://www.codeproject.com/Articles/2933/Attributes-in-C 希望這會刺激你。