类
类是自定义数据类型的蓝图,对现实生活中一类具有共同特征的事物的抽象。它是面向对象中的概念,是面向对象编程的基础。
类是一种数据结构,包含了数据成员(字段、常量)和函数成员(方法、属性、索引器、事件、运算符、构造函数、析构函数和静态构造函数)。类的类型是支持继承。
1、类的声明
class是声明类的关键字,其格式为[访问修饰符] class 类名称 [: 父类名] { [访问修饰符] 数据成员或函数成员 }。关于访问修饰符可以阅读前面文章访问修饰符。下面通过一段代码了解其定义:
public class PrintImage{#region 数据成员 /// <summary> /// 打印机名称 /// </summary> private string _Printername= string.Empty;; /// <summary> /// 图片 /// </summary> public Image ImageDocument { get; set; }#endregion
#region 函数成员 /// <summary> /// 构造函数 /// </summary> public PrintImage() { // 方法体内容 } /// <summary> /// 析构函数 /// </summary> ~ PrintImage() { // 方法体内容 } /// <summary /// 打印方法 /// </summary> public Print(string printername,Image image) { // 方法体内容 } /// <summary /// 预览方法 /// </summary> public Preview(Image image) { // 方法体内容 } /// <summary> /// 泛型方法 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="parameter"></param> public static void Show<T>(T parameter) { // 方法体内容 }#endregion}
2、构造函数
构造函数是一个与类共享相同名称的方法,每个类只有一个。通常设置在类中定义的变量的初始值。构造函数类型有默认构造函数、参数化构造函数、复制构造函数、静态构造函数和私有构造函数。默认构造函数没有任何参数。using System;
namespace Fountain.Net.Base.Sample{ public class Cars { /// <summary> /// 品牌 /// </summary> private string brand =string.Empty; /// <summary> /// /// </summary> public string Brand { get { return brand; } set { brand = value; } } /// <summary> /// 构造函数 /// </summary> public Cars() { Console.WriteLine("已声明创建对象"); } /// <summary> /// 析构函数 /// </summary> ~ Cars() { Console.WriteLine("对象已被删除"); } }}//== 引用using System;
namespace Fountain.Net.Base.Sample{ class Program { static void Main(string[] args) { Cars cars=new Cars(); // 设置 cars.Brand="dotNet开发技术分享"; // 获取后输出 Console.WriteLine(string.Format("汽车品牌:{0}",cars.Brand)); // Console.ReadLine(); } }}
//== 结果已声明创建对象汽车品牌:dotNet开发技术分享
对象已被删除
3、析构函数
析构函数是一种特殊的成员函数,用于在对象被销毁时执行必要的释放资源。
析构函数特性:一个类只能有一个、无法继承或重载、无法调用、既没有修饰符,也没有参数。
//== 引用using System;
namespace Fountain.Net.Base.Sample{ class Program { static void Main(string[] args) { Cars cars=new Cars(); // 设置 cars.Brand="dotNet开发技术分享"; // 获取后输出 Console.WriteLine(string.Format("汽车品牌:{0}",cars.Brand)); } }}
//== 结果已声明创建对象汽车品牌:dotNet开发技术分享对象已被删除
4、抽象类
以abstract 关键字修饰符用于定义抽象类,不完整,并且它仅用作基类。抽象类有几个特性,包括不能直接实例化、不能被密封、允许但非必须包含抽象成员。using System;
namespace Fountain.Net.Base.Sample{ /// <summary> /// 定义动物抽象类 /// </summary> public abstract class Animal { public abstract void Run(); } /// <summary> /// 定义由动物类派生猫 /// </summary> public class Cat : Animal { public override void Eat() { // 输出 Console.WriteLine("小猫吃鱼"); } }}//== 引用using System;
namespace Fountain.Net.Base.Sample{ class Program { static void Main(string[] args) { Cat cat=new Cat(); // 调用方法 cat.Eat(); Console.ReadLine(); } }}
5、密封类
以sealed关健字修饰符定义的类,密封类特性有不能被继承。如果是密封成员,则派生类中不能对其重写该成员。密封成员属性可提高反射在检索属性时的性能。
using System;using System.Collections.Generic;
namespace Fountain.Net.Base.Sample{ /// <summary> /// 密封类 /// </summary> public sealed class Users { /// <summary> /// 用户ID /// </summary> public string UserId { get; set; } /// <summary> /// 用户名称 /// </summary> public string UserName { get; set; } /// <summary> /// 密封并重写基类中的ShowInfo方法/// /// </summary> public bool Login() { try { return true; } catch(Exception exception) { throw new Exception(exception.Message); } } /// <summary> /// 获取用户列表 /// </summary> /// <returns></returns> public Dictionary<string,string> Getuser() { try { Dictionary<string, string> userList = new Dictionary<string, string>();
userList.Add("ID20240001", "A用户"); userList.Add("ID20240002", "B用户"); userList.Add("ID20240003", "C用户"); userList.Add("ID20240004", "D用户");
return userList;
} catch (Exception exception) { throw new Exception(exception.Message); } } }}
using System;
namespace Fountain.Net.Base.Sample{ class Program { static void Main(string[] args) { Users users = new Users(); users.UserId="ID20240001"; users.UserName="A用户"; Console.WriteLine(string.Format("用户:{0}-{1} 登录状态:{2}",users.UserId,users.UserName,users.Login())); Dictionary<string, string> userList = users.Getuser(); foreach (string item in userList.Keys) { Console.WriteLine(string.Format("在线用户:{0}-{1}", item, userList[item])); } Console.ReadLine(); } }}
// 输出结果用户:ID20240001-A用户 登录状态:True在线用户:ID20240001-A用户在线用户:ID20240002-B用户在线用户:ID20240003-C用户在线用户:ID20240004-D用户
6、静态类
以static关健字修饰符定义的类,静态类主要特性有不能实例化、仅包含静态成员、密封的、不能包含实例构造函数。
using System;using System.IO;
namespace Fountain.Net.Base.Sample{ /// <summary> /// 静态类 /// </summary> public static class Logs { // 静态字段 当前程序的执行路径 private static string path=System.AppDomain.CurrentDomain.BaseDirectory; /// <summary> /// 写日志内容的静态方法 /// </summary> /// <param name="content">内容</param> public static void Writting(string content) { try { // 根据日期定义文件名称 string filename = string.Format("{0}.log",DateTime.Now.ToString("yyyyMMddHH")); // 将内写转成字节 byte[] contentArray = System.Text.Encoding.UTF8.GetBytes(content); // 创建文件流 using (FileStream fileStream = new FileStream(path + Path.DirectorySeparatorChar + filename, FileMode.Append, FileAccess.Write, FileShare.ReadWrite)) { fileStream.Seek(0, System.IO.SeekOrigin.End); // 写入流 fileStream.Write(contentArray, 0, contentArray.Length); } } catch(Exception exception) { throw new Exception(exception.Message); } } }}
// 应用// 静态类 不用创建实列直接调用Logs.Writting("测试静态类的调用");
小结
以上是C#中面向对象基础的类的全部内容,希望对大家理解类一定的参考借鉴价值, 敬请关注后续内容。
该文章在 2024/3/26 18:53:27 编辑过