C#学习日记13—类(Class)的声明与定义

 类作为面向对象的灵魂,在c#中有着相当广泛和深入的应用,对类的深度掌握自然是我们学习c#重要的一个环节.有关类的意义上一篇  c#学习日记12—引用类型 中已经给出了,这里就不再重复了.说到 类 就不得不说下与之息息相关的内容—-对象.

类与对象:

           类:  从具有相同属性的事物当中抽象出来的概念,一般用来描述同类个体的集合。

    对象: 从类当中具体化的一个个体。(比如人类就是一个类, 张三 就是人类中的一个对象)

    属性:用来描述对象特征的。   (在类里面,是类的数据成员^_^)

    方法:   说明对象具有的能力。   (在类里面,是类的数据成员^_^,在C/C++中它叫函数,以后要改口啦)

    事件:  具有触发能力的函数.        

                (与方法不同的是,事件是被动,由外部事物发出,受动者是对象; 而方法是由对象主动发出的动作,是类的数据成员)

 

类的定义:

    类的定义是以关键字 class 开始,后跟类的名称。类的主体,包含在一对花括号内。

访问修饰符 class  类名   {        访问修饰符数据成员;   }

 

举个例子:

 public class Student      {            private string name;            private int age;     }

  访问类里面的数据成员方式与 Struct类型 一样,您要使用(.)点运算符(链接了对象的名称和成员的名称),对于访问修饰符,这里对 private、public、internal 稍微说一下(以后我会细说哒):

   private:  私有访问。只限于本类成员访问,子类,实例(对象)都不能访问 (换句话说供类自身调用)。

   public:   公有访问。不受任何限制,所有类都可访问。

   internal:  同一个程序集中的所有类均可访问,可以想象成Public 的其中一个程序集集合。

 

    如果没有指定访问修饰符,相关的访问权限就会使用默认权限,类的默认权限是 internal,  成员的默认权限是private; 所以当我们以后出现了有关访问权限问题的时候,记得看看是不是没指定访问修饰符或者使用不适当。

 

创建对象:

         也可以说是对类进行对象实例化,需要采用 new 语句。拿上面定义好的类举例子 Student  stu = new Student();  此时会调用Student类当中的 构造方法(函数,通俗的理解为初始化函数吧,以后在说构造函数与析构函数),如果没有默认将数据成员赋值为0;

下面就写个列子:

using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;    namespace Test  {   //定义的一个类,类名叫People      public class People      {         //全部指定为公有成员          public string name;              public char sex;                  public uint age;            }        class Program      {                   static void Main(string[] args)          {              People person = new People();        //实例化一个类,对象名叫 person              Console.WriteLine("输入姓名: ");              person.name = Console.ReadLine();   //  全部轻松访问,没有压力               Console.WriteLine("请输入性别:");              person.sex = Console.ReadKey().KeyChar;    //char 类型转换              Console.WriteLine("n请输入年龄:");              person.age = uint.Parse(Console.ReadLine());   //强制类型转换              Console.WriteLine("您的姓名是:{0}t您的性别是:{1}t您的年龄是:{2}",person.name,person.sex,person.age);            }      }  }

运行下:

498.png

 看完上面写的代码,发现 这与 Struct类型 除了名字不同外有何区别?? 在上面的程序中确实没有区别(所有成员都是Public),看下面这个:

using System;  using System.Collections.Generic;  using System.Linq;  using System.Text;    namespace Test  {   //定义的一个类,类名叫People      public class People      {         //全部指定私有成员          private string name;              private char sex;                  private uint age;            //定义public 方法作用是输入与输出          public void input()          {              Console.WriteLine("输入姓名: ");              name = Console.ReadLine();                 Console.WriteLine("请输入性别:");              sex = Console.ReadKey().KeyChar;    //char 类型转换              Console.WriteLine("n请输入年龄:");              age = uint.Parse(Console.ReadLine());   //强制类型转换                    }          public void output()          {              Console.WriteLine("您的姓名是:{0}t您的性别是:{1}t您的年龄是:{2}",name, sex,age);                    }            }        class Program      {                   static void Main(string[] args)          {              People person = new People();        //实例化一个类,对象名叫 person                person.input();         //通过调用 public 方法访问privat 成员并赋值                person.output();    //此时无法使用直接使用 Console.WriteLine(person.name)输出,访问权限不够            }      }  }

    运行过于上面一模一样,在class类中我们可以定义方法,(上面的input与output是两个方法)而在Struct 结构体中不能定义方法,而且我们将People类中的属性指定为private 私有成员,外界对象person无法直接访问,只能通过People中指定的Public方法访问。举个例子吧:  当我俩打电话的时候,我俩并没有面对面的交流,而是通过 手机 这个媒介相互交换信息,此时 手机就可以看作你的一个public方法,你就是一个类中私有成员,我就是这个类实例化的一个对象。

以上就是C#学习日记13—类(Class)的声明与定义的内容,更多相关内容请关注PHP中文网(www.php.cn)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1431955.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 05:59:32
下一篇 2025年12月12日 14:11:04

相关推荐

  • C#中遍历各类数据集合的方法总结

    c#中遍历各类数据集合的方法,这里自己做下总结: 1.枚举类型  //遍历枚举类型Sample的各个枚举名称 foreach (string sp in Enum.GetNames(typeof(Sample))) { ary.Add(sp); } //遍历枚举类型Sample的各个枚举值 fore…

    好文分享 2025年12月17日
    000
  • C#数据绑定控件中的DataSource属性浅谈

    有的时候,你在编程进入一定阶段,进一步提升很困难的境况之下,不妨回过头来看看基础的东西,或许你会有新的受益,或许能够真正的体会到孔夫子所谓的“温故而知新”的真正内涵。常用的c#数据绑定控件有:repeater、datalist、gridview、detailsview等,在这里我拿repeater来…

    好文分享 2025年12月17日
    000
  • C++设计模式浅识策略模式

    策略模式定义:  定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。  策略模式包含如下角色: context:环境类 strategy:抽象策略类 concretestrategy: 具体策略类 uml类图:  测试用例 [code]int mai…

    2025年12月17日
    000
  • C++设计模式浅识单例模式

    什么是单例模式?  保证一个类只有一个实例,并提供一个访问它的全局访问点。【dp】  让类的自身负责保存它的唯一实例,这个类保证没有其他实例可以被创建,并且此类可以提供一个访问该实例的方法。【dp】  什么时候需要单例模式?  程序只需要一个方法控制某项功能,不允许创建第二个此功能。比如:银行使用的…

    好文分享 2025年12月17日
    000
  • C#中OpenFileDialog和PictrueBox的用法分析

    本文实例讲述了c#中openfiledialog和pictruebox的用法。分享给大家供大家参考。具体用法分析如下: 先来看看这段代码: string resultFile = “”;OpenFileDialog openFileDialog1 = new OpenFileDialog();ope…

    好文分享 2025年12月17日
    000
  • C#中的switch case使用介绍

    在c#中  switch(type) { case tpye1: break; case tpye2: break; case tpye3: break; case tpye4: break; }; 其中type可以是数字,也可以是字符串;  以上就是C#中的switch case使用介绍的内容,更…

    2025年12月17日
    000
  • C# 判断两张图片是否一致的快速方法

    c# 判断两张图片是否一致的快速方法 #region 判断图片是否一致 /// /// 判断图片是否一致 /// /// 图片一 /// 图片二 /// 是否一致 public bool IsSameImg(Bitmap img, Bitmap bmp) { //大小一致 if (img.Width…

    好文分享 2025年12月17日
    000
  • C# web api返回类型设置为json的两种方法

    web api写api接口时默认返回的是把你的对象序列化后以xml形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法)  找到global.asax文件,在application_start()方法中添加一句:  GlobalConfiguration.Config…

    好文分享 2025年12月17日
    000
  • c#生成缩略图不失真的方法实例分享

    c#生成缩略图不失真的方法实例分享 /// /// 获得缩微图/// /// public bool GetThumbImg(){try{string imgpath; //原始路径 if(imgsourceurl.IndexOf(“\”,0)<0) //使用的是相对路径 {imgpath =…

    好文分享 2025年12月17日
    000
  • c#将Excel数据导入到数据库的实现代码

    c#将excel数据导入到数据库的实现代码 假如Excel中的数据如下: 数据库建表如下: 其中Id为自增字段: 代码: using System;using System.Collections.Generic;using System.Linq;using System.Web;using Sy…

    2025年12月17日 好文分享
    000
  • C#实现上传照片到物理路径,并且将地址保存到数据库的小例子

    c#实现上传照片到物理路径,并且将地址保存到数据库的小例子 效果: 思路:首先,获取图片物理地址,然后进行判断将图片保存到文件夹下,再将图片的信息保存到数据库。数据库: create table image1 ( ID int identity(1,1) primary key, ImageName…

    2025年12月17日
    000
  • C#中的FileUpload 选择后的预览效果具体实现

    c#中的fileupload 选择后的预览效果  实现方法:  HTML:  JS:  function onFileChange(sender) { document.getElementById(“imgDimensionalPic”).src = window.URL.createObject…

    2025年12月17日
    000
  • c#加密类使用方法示例

    c#加密类使用方法示例 using System;using System.IO;using System.Text;using System.Security.Cryptography;using System.Web;namespace Encryption.App_Code{ /// /// …

    好文分享 2025年12月17日
    000
  • C#操作Excel数据增删改查示例

    c#操作excel数据增删改查。  首先创建exceldb.xlsx文件,并添加两张工作表。  工作表1:  userinfo表,字段:userid、username、age、address、createtime。  工作表2:  order表,字段:orderno、productname、quan…

    好文分享 2025年12月17日
    000
  • 通过C#动态生成图书信息XML文件

    通过c#动态生成图书信息xml文件(books.xml),文件如下:  Harry Potter J K. Rowling 2005-08-15 29.99 Learning XML Erik T. Ray 2003-10-18 39.95 方法1:使用StringBuilder拼接XML  ///…

    好文分享 2025年12月17日
    000
  • C#获取当前页面的URL示例代码

    本实例的测试url:http://www.mystudy.cn/web/index.aspx  1、通过c#获取当前页面的url  string url = Request.Url.AbsoluteUri; //结果: http://www.mystudy.cn/web/index.aspx str…

    好文分享 2025年12月17日
    000
  • C++设计模式浅识装饰模式

    装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。  装饰模式的四个角色: 组件类:component 具体组件类:coneretecomponent 装饰类:decorator(从外类来扩展component类的功能,但对于component来说是无需知道d…

    好文分享 2025年12月17日
    000
  • C++设计模式浅识迭代器模式

    迭代器模式:提供一中方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。【dp】 四个角色: iterator迭代器抽象类: 用于定义得到开始对象,得到下一个对象、判断是否到结尾、当前对象等抽象方法,统一接口。 concreteiterator具体迭代器类: 继承iterator,实现…

    好文分享 2025年12月17日
    000
  • C++设计模式浅识外观模式

    外观模式(facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 两大角色: 外观类facade: 知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象。 子系统集合subsystem: 实现子系统的功能,处理facade对…

    好文分享 2025年12月17日
    000
  • C++设计模式浅识模板方法模式

    模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 适用的一个时机:当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。 模板方…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信