正文

修饰符的一个例子new virtual override sealed2007-10-13 19:02:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/jixian/30071.html

分享到:

//与java不同,c#不允许使用对象实例调用静态方法,让我惊讶啊!!

//c++可不这样

using System;
using System.Collections.Generic;
using System.Text;

namespace __5
{
    //class Program
    //{
    //    static void Main(string[] args)
    //    {

    //    }
    //}

    abstract public class person
    {
        string name;
        string ssn;
        int age;
        float salary;

        public person(string name, string ssn, int age, float sal)
        {
            this.name = name;
            this.ssn = ssn;
            this.age = age;
            this.salary = sal;
        }

        private string getssn()        //??
        {
            return ssn;
        }


        protected int getage()
        {
            return age;
        }
        internal float getsalary()
        {
            return salary;
        }
        string getname()
        {
            return name;
        }

        protected static string  getbloodcolor()              //静态方法
        {
            return "red";
        }
        static int getnumberofeyes()
        {
            return 2;
        }

        public override string ToString()
        {
            return name;
        }
        public override int GetHashCode()
        {
            //return base.GetHashCode();
            return 12222;
        }
        public sealed override bool Equals(object obj)
        {
            //return base.Equals(obj);
            person p = obj as person;
            if (p == null)
                return false;
            return this.name.Equals(p.getname());
        }
        public virtual void calcinvestments()
        {
            Console.WriteLine("person funds");
        }

        public virtual void calcdebt()
        {
            Console.WriteLine("person debt");
        }
        public abstract void work();
      
    }

    public class man : person
    {
        public man(string name, string ssn, int age, float sal) : base(name, ssn, age, sal) { }

        public override void work()
        {
            Console.WriteLine("works like a dog");
        }
        public override void calcinvestments()
        {
            //base.calcinvestments();
            Console.WriteLine("man funds");
        }
        public new void calcdebt()
        {
            Console.WriteLine("man debt");
        }

        public static void Main(string[] agrs)
        {
            man m = new man("jack","12345678",23,40000f);
            //Console.WriteLine(m.getbloodcolor());           //与java不同,c#不允许使用对象实例调用静态方法

            //Console.WriteLine(m.getnumberofeyes());        //无访问权限
            //Console.WriteLine(m.getssn());
            //Console.WriteLine(m.getname());

            Console.WriteLine(m.getsalary());
            Console.WriteLine(m.getage());

            m.calcinvestments();

            person p = m as person;
            p.calcinvestments();
            Console.WriteLine("----");
            ((person)m).calcinvestments();

            m.calcdebt();
            p.calcdebt();
            Console.WriteLine("----");
            ((person)m).calcdebt();
        }
    }
}

阅读(1895) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册