C#中类相关

1、隐藏基类方法:

(1)在子类中使用new关键字显示的隐藏基类中的方法,基类的方法是虚拟的或非虚拟的都可以;

(2)如果继承的方法是虚拟的(virtual),可以用override关键字重写方法的实现代码。

public class MyBaseClass
    {
        public virtual void DoSomething()
        {
            Console.WriteLine("Base");
        }
    }
public class MyDerivedClass:MyBaseClass
    {
        public new
/*override*/ void DoSomething()
        {
            Console.WriteLine("Derived");
        }
    }
 

使用new和override的区别:

MyDerivedClass mdc = new MyDerivedClass();
            MyBaseClass mbc;
            mbc = mdc;
            mbc.DoSomething();

如上调用时,如果是用new重写基类方法,则结果是:Base。即,尽管隐藏了基类的实现代码,但仍可以通过基类访问它。

如果是用override重写基类方法,则结果是:Derived。即,重写方法将替换基类中的实现代码,即使通过基类类型访问也是执行的重写后的代码。


2、类中使用base和this关键字:

base关键字表示包含在派生类中的基类的实现代码。base引用的是对象实例,因此不能在静态成员中使用base关键字。

  this关键字表示当前的对象实例。this也是引用的对象实例,因此也不能在静态成员中使用this关键字。因为静态成员不是对象实例的一部分。


3、嵌套类:

嵌套类可以访问其包含类的私有和受保护成员。如:

public class ClassA
    {
        private int state = -1;
        public int State
        {
            get { return state; }
            set { state = value; }
        }
        public class ClassB
        {
            public void SetPrivateState(ClassA target,int newState)
            {
                target.state = newState;
            }
        }
    }

调用:

ClassA myObject = new ClassA();
            Console.WriteLine("myObject.State={0}", myObject.State);
            ClassA.ClassB myOtherObject = new ClassA.ClassB();
            myOtherObject.SetPrivateState(myObject, 999);
            Console.WriteLine("myObject.State={0}", myObject.State);

结果输出:

myObject.State=-1

myObject.State=999

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值