C#中类的创建

一、类定义

一个类可以有很多方法和属性以及字段。感觉我以前经常把类和方法弄混淆,类是后面没有()的,直接就是像下面的几段代码,简单的类就OK了,如果想进一步声明方法的话,在{}里面声明;

下面介绍几种类

<1>

    class Class1
    {
      //class Members       
    }

这样的类只能在本项目中进行实例化。

<2>

    public class Class1
    {
      //class Members       
    }

这样的类可以在其他项目中进行实例化进行使用。

<3>

    public abstract class Class1
    {
      //class Members       
    }

abstract 为关键字意思为抽象的,该类不能实例化,只能继承

<4>

    public  sealed class Class1
    {
      //class Members       
    }

sealed为密封的意思,该类不能继承,只可以派生。可以说和abstract是互斥的关键字

<5>

    public  class Class1:MyBase
    {
      //class Members       
    }
    public class MyBase
    {
      //class Members       
    }

        默认的基类是System.Object,所以我们平时会注意到每一个类的实例都有这几个方法(Equals,GetType,GetHashCode,ToString),其实这四个方法就是基类的方法,当一个类在默认继承时获取的方法。

       还有个要注意的地方是:派生类的访问性不能比基类的可访问性高,但可以一样高的。如果把MyBase的public去掉就会产生错误,还有值得注意的是Class1只能有一个父类。但是可以继承多个接口。如果一个类既想实现继承类又想实现继承接口,那么要接口放在类后面并用逗号隔开。

 二、类成员 (方法、属性、字段)的定义

在介绍定义之前先说几个关键字public,private,protected,internal这几个应该是较熟悉的下面再逐个温习一下

  • public--成员可以由任何代码访问。
  • private--只能由类中的代码访问。
  • protected-- 成员只能由类或派生类中的代码访问。
  • internal--成员只能由定义他的项目内部的代码访问。
  • 还有个是protected internal 只能由项目中派生类的代码访问。

因为所有的类成员都可以有自己的访问级,所以都可以由上述修饰。

<1>方法的定义和重写

定义:public override void GetString()

            {

// this's GetString's Code

            }

类似上面形式,其中括号里可能有参数,相对比较简单。在此不多说。主要说一下方法的重写

重写:方法可以被继承类重写,主要通过virtual,override来实现的

重写需注意返回类型和方法的名称要和基类的一致。

    public class BaseClass
    {
        public virtual void WriteString()
        {

            Console.WriteLine("hahh");
            Console.WriteLine("dasfa");
        }
        public void WriteClass()
        {

            Console.WriteLine("我是另外一个方法");
        }
    }
    public class Class1:BaseClass
    {
        public override sealed void WriteString()
        {
            Console.WriteLine("hahh");            
        }
    
    }

重写的一个好处是一个方法被重写了(需要修改的方法重写了),继承其他的方法照样还能用。如上面的例子当需要调用Class1时候。继承得到的WriteClass方法仍然可以用,但是WriteString方法已经在子类中被改了,在父类是没有改的。在后面的子类中的方法加了一个sealed,此类可以被继承(如果是在类的前面加个sealed就不能继承了),但是类的WriteString方法是不能被重写了,否则是可以重写的。如果没有sealed,则下面的写法就是对的

    public class Class2 : Class1
    {
        public override void WriteString()
        {
            Console.WriteLine("再次修改");
        }
    
    }

但是如果加上sealed关键字就不能重写了。

<2> 定义属性
定义一个属性非常简单

    public class Product
    {
       public int Product_ID
        {
            get;//获取属性的值
              set;//设置属性的值
        }
    }

这样一段代码就等于定义了一个类的属性,就可以调用了 Product.Product_ID
但是如果要想把属性运用的自如,那么要将其给字段联系起来,例子 如果当属性的值大于10的时候,我想把属性值取10

那就可以这样写

    public class Product
    {
        private int _Product_ID = 0;
        public int Product_ID
        {
            get//获取属性的值
            {
                if (_Product_ID > 10)//获取后判断
                    return 10;
                else
                    return _Product_ID;
            }
            set//设置属性的值
            {
                 _Product_ID = value;//value 是用户提供属性,把用户提供属性赋给_Product_ID,以便获取
            }

        }
    }

主函数代码为

    public class Program 
    {
        static void Main(string[] args)
        {
            Product pd = new Product();
            pd.Product_ID = 20;
            Console.WriteLine(pd.Product_ID.ToString());//当获取的时候发现属性值大于20,进行处理
            Console.ReadKey();
        }
     
    }

最终输入结果为10

关于get和set 一定要记住一个是获取值(用的时间获取),set设置属性的值(用户提供的时间)

如果说到这里,我想大家应该可以很轻松的创建一个类,先写到这里,有机会再补充。本文只代表个人想法,欢迎大家批评和指正。

posted @ 2011-08-31 16:21  haiziguo  阅读(2140)  评论(0编辑  收藏  举报