zoukankan      html  css  js  c++  java
  • 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设置属性的值(用户提供的时间)

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

  • 相关阅读:
    Laravel 禁用指定 URL POST 请求的 csrf 检查
    laravel console
    python之面向对象(一)
    python中os.popen, os.system()区别
    Day6作业:计算器
    Day5作业,商城+ATM机+后台管理
    python基础之反射
    python基础之坑爹正则表达式
    python基础之模块(一)
    python 中的一些基础算法:递归/冒泡/选择/插入
  • 原文地址:https://www.cnblogs.com/lzhp/p/2680801.html
Copyright © 2011-2022 走看看