bartholomew

如此星辰非昨夜,为谁风露立中宵~

new作为修饰符时的使用,以及接口的显式实现

先上代码:
namespace ConsoleApplication1
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            BClass b 
= new BClass();

            ((AClass)b).Output();
            b.Output();
            ((IA)b).Output();

            Console.ReadLine();
        }

    }


    
public interface IA
    
{
        
void Output();
    }


    
public abstract class AClass : IA 
    
{
        
public AClass()
        
{
            Console.WriteLine(
"AClass");
        }


        
public virtual void Output()
        
{
            Console.WriteLine(
"AClass Output");
        }


        
IA Members
    }


    
public class BClass : AClass
    
{
        
public BClass()
        
{
            Console.WriteLine(
"BClass");
        }


        
public new void Output()
        
{
            Console.WriteLine(
"BClass Output");
        }

    }

}
输出为:
AClass...
BClass...
AClass Output...
BClass Output...
AClass Output Exlicitly...

将代码中的new 替换为override,则输出变为:
AClass...
BClass...
BClass Output...
BClass Output...
AClass Output Exlicitly...

从以上代码我们可以看出:
new 作为修饰符时,其作用是隐藏从基类继承过来的方法,注意,仅仅是隐藏,这就意味着我们还是有办法调用到被隐藏的那个方法。而要调用被隐藏的那个方法,实现办法和要调用显示实现的接口方法一样。
而如果用override时,就会重写从基类继承过来的方法,那么,就怎么也调用不到基类的那个方法了。

posted on 2008-06-26 18:28  bartholomew  阅读(268)  评论(0编辑  收藏  举报

导航