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设置属性的值(用户提供的时间)
如果说到这里,我想大家应该可以很轻松的创建一个类,先写到这里,有机会再补充。本文只代表个人想法,欢迎大家批评和指正。