2010-11-28 58 views
3

我有一個product.aspx類C#保護關鍵字相關的問題

public partial class _Products : Product 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

     Product p1 = new Product(); 
     p1.m1(); ///here I am facing problem y intelligence system not allowing me access the product class method m1(); 
    } 
    new virtual int m1() 
    { 
     return 10; 
    } 
} 

,在我AppCode我有一個類product.cs

public class Product 
{ 
    public Product() 
    { 
     // 
     // TODO: Add constructor logic here 
     // 
    } 
    protected void m1() 
    { 

    } 
    public void m2() 
    { 

    } 

裏邊反問題是,p1.m1() ;在這裏我面臨的問題是我的智能系統不允許我訪問產品類的方法m1();

+2

參見:http://blogs.msdn.com/b/ericlippert/archive/2005/11/09/why-can-ti-access-a-protected-member-from- a-derived-class.aspx – 2010-11-28 08:51:13

回答

2

如果你實例化一個新的產品,你不能訪問它保護的成員從另一個類,即使它從產品派生

+0

這就是我想知道的,是嗎? – NoviceToDotNet 2010-11-28 08:31:59

+0

但受保護的可用子類Ÿ我不能訪問該受保護的方法? – NoviceToDotNet 2010-11-28 08:33:11

2

你沒有說明他的問題,但我希望你的意思是:

(基類)

protected abstract int m1(); 

(子類)

protected override int m1() { 
    return 10; 
} 

也;您的頁面的一款產品;您不需要在構造函數中創建一個附加的產品。所以Page_Load應該可以在當前實例(「this」)上調用虛擬方法。

+0

我只是混淆了基類受保護的方法m1()不能在使用基類對象的子類中訪問? – NoviceToDotNet 2010-11-28 08:31:24

1

M1()在產品法(父)類返回void但M1()方法_產品展示(孩子)類返回int。他們應該返回相同的類型。另外,您可能希望在父類中爲m1()方法使用虛擬關鍵字,並在子類中爲m1()方法使用override(或new)關鍵字。

1

唯一的民營的方法可以onot從子類中調用,受保護的方法可以從子類中調用,但如果你創建的,其中保護法defind的類的實例,你woun't能夠得到保護的方法

試試下面的例子

public class P : Product 
{ 
    public P() 
    { 
     m1(); 
    } 
} 


public class Product 
{ 
    public Product() 
    {  //  // TODO: Add constructor logic here   
    } 
    protected void m1() { } 
    public void m2() { } 



}