類(lèi)
類(lèi)是自定義數(shù)據(jù)類(lèi)型的藍(lán)圖,對(duì)現(xiàn)實(shí)生活中一類(lèi)具有共同特征的事物的抽象。它是面向?qū)ο笾械母拍睿敲嫦驅(qū)ο缶幊痰幕A(chǔ)。
類(lèi)是一種數(shù)據(jù)結(jié)構(gòu),包含了數(shù)據(jù)成員(字段、常量)和函數(shù)成員(方法、屬性、索引器、事件、運(yùn)算符、構(gòu)造函數(shù)、析構(gòu)函數(shù)和靜態(tài)構(gòu)造函數(shù))。類(lèi)的類(lèi)型是支持繼承。
1、類(lèi)的聲明
class是聲明類(lèi)的關(guān)鍵字,其格式為[訪(fǎng)問(wèn)修飾符] class 類(lèi)名稱(chēng) [: 父類(lèi)名] { [訪(fǎng)問(wèn)修飾符] 數(shù)據(jù)成員或函數(shù)成員 }。關(guān)于訪(fǎng)問(wèn)修飾符可以閱讀前面文章訪(fǎng)問(wèn)修飾符。下面通過(guò)一段代碼了解其定義:
public class PrintImage
{
#region 數(shù)據(jù)成員
/// <summary>
/// 打印機(jī)名稱(chēng)
/// </summary>
private string _Printername= string.Empty;;
/// <summary>
/// 圖片
/// </summary>
public Image ImageDocument { get; set; }
#endregion
#region 函數(shù)成員
/// <summary>
/// 構(gòu)造函數(shù)
/// </summary>
public PrintImage()
{
// 方法體內(nèi)容
}
/// <summary>
/// 析構(gòu)函數(shù)
/// </summary>
~ PrintImage()
{
// 方法體內(nèi)容
}
/// <summary
/// 打印方法
/// </summary>
public Print(string printername,Image image)
{
// 方法體內(nèi)容
}
/// <summary
/// 預(yù)覽方法
/// </summary>
public Preview(Image image)
{
// 方法體內(nèi)容
}
/// <summary>
/// 泛型方法
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="parameter"></param>
public static void Show<T>(T parameter)
{
// 方法體內(nèi)容
}
#endregion
}
2、構(gòu)造函數(shù)
構(gòu)造函數(shù)是一個(gè)與類(lèi)共享相同名稱(chēng)的方法,每個(gè)類(lèi)只有一個(gè)。通常設(shè)置在類(lèi)中定義的變量的初始值。構(gòu)造函數(shù)類(lèi)型有默認(rèn)構(gòu)造函數(shù)、參數(shù)化構(gòu)造函數(shù)、復(fù)制構(gòu)造函數(shù)、靜態(tài)構(gòu)造函數(shù)和私有構(gòu)造函數(shù)。默認(rèn)構(gòu)造函數(shù)沒(méi)有任何參數(shù)。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>
/// 構(gòu)造函數(shù)
/// </summary>
public Cars()
{
Console.WriteLine("已聲明創(chuàng)建對(duì)象");
}
/// <summary>
/// 析構(gòu)函數(shù)
/// </summary>
~ Cars()
{
Console.WriteLine("對(duì)象已被刪除");
}
}
}
//== 引用
using System;
namespace Fountain.Net.Base.Sample
{
class Program
{
static void Main(string[] args)
{
Cars cars=new Cars();
// 設(shè)置
cars.Brand="dotNet開(kāi)發(fā)技術(shù)分享";
// 獲取后輸出
Console.WriteLine(string.Format("汽車(chē)品牌:{0}",cars.Brand));
//
Console.ReadLine();
}
}
}
//== 結(jié)果
已聲明創(chuàng)建對(duì)象
汽車(chē)品牌:dotNet開(kāi)發(fā)技術(shù)分享
對(duì)象已被刪除
3、析構(gòu)函數(shù)
析構(gòu)函數(shù)是一種特殊的成員函數(shù),用于在對(duì)象被銷(xiāo)毀時(shí)執(zhí)行必要的釋放資源。
析構(gòu)函數(shù)特性:一個(gè)類(lèi)只能有一個(gè)、無(wú)法繼承或重載、無(wú)法調(diào)用、既沒(méi)有修飾符,也沒(méi)有參數(shù)。
//== 引用
using System;
namespace Fountain.Net.Base.Sample
{
class Program
{
static void Main(string[] args)
{
Cars cars=new Cars();
// 設(shè)置
cars.Brand="dotNet開(kāi)發(fā)技術(shù)分享";
// 獲取后輸出
Console.WriteLine(string.Format("汽車(chē)品牌:{0}",cars.Brand));
}
}
}
//== 結(jié)果
已聲明創(chuàng)建對(duì)象
汽車(chē)品牌:dotNet開(kāi)發(fā)技術(shù)分享
對(duì)象已被刪除
4、抽象類(lèi)
以abstract 關(guān)鍵字修飾符用于定義抽象類(lèi),不完整,并且它僅用作基類(lèi)。抽象類(lèi)有幾個(gè)特性,包括不能直接實(shí)例化、不能被密封、允許但非必須包含抽象成員。using System;
namespace Fountain.Net.Base.Sample
{
/// <summary>
/// 定義動(dòng)物抽象類(lèi)
/// </summary>
public abstract class Animal
{
public abstract void Run();
}
/// <summary>
/// 定義由動(dòng)物類(lèi)派生貓
/// </summary>
public class Cat : Animal
{
public override void Eat()
{
// 輸出
Console.WriteLine("小貓吃魚(yú)");
}
}
}
//== 引用
using System;
namespace Fountain.Net.Base.Sample
{
class Program
{
static void Main(string[] args)
{
Cat cat=new Cat();
// 調(diào)用方法
cat.Eat();
Console.ReadLine();
}
}
}
5、密封類(lèi)
以sealed關(guān)健字修飾符定義的類(lèi),密封類(lèi)特性有不能被繼承。如果是密封成員,則派生類(lèi)中不能對(duì)其重寫(xiě)該成員。密封成員屬性可提高反射在檢索屬性時(shí)的性能。
using System;
using System.Collections.Generic;
namespace Fountain.Net.Base.Sample
{
/// <summary>
/// 密封類(lèi)
/// </summary>
public sealed class Users
{
/// <summary>
/// 用戶(hù)ID
/// </summary>
public string UserId { get; set; }
/// <summary>
/// 用戶(hù)名稱(chēng)
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 密封并重寫(xiě)基類(lèi)中的ShowInfo方法///
/// </summary>
public bool Login()
{
try
{
return true;
}
catch(Exception exception)
{
throw new Exception(exception.Message);
}
}
/// <summary>
/// 獲取用戶(hù)列表
/// </summary>
/// <returns></returns>
public Dictionary<string,string> Getuser()
{
try
{
Dictionary<string, string> userList = new Dictionary<string, string>();
userList.Add("ID20240001", "A用戶(hù)");
userList.Add("ID20240002", "B用戶(hù)");
userList.Add("ID20240003", "C用戶(hù)");
userList.Add("ID20240004", "D用戶(hù)");
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用戶(hù)";
Console.WriteLine(string.Format("用戶(hù):{0}-{1} 登錄狀態(tài):{2}",users.UserId,users.UserName,users.Login()));
Dictionary<string, string> userList = users.Getuser();
foreach (string item in userList.Keys)
{
Console.WriteLine(string.Format("在線(xiàn)用戶(hù):{0}-{1}", item, userList[item]));
}
Console.ReadLine();
}
}
}
// 輸出結(jié)果
用戶(hù):ID20240001-A用戶(hù) 登錄狀態(tài):True
在線(xiàn)用戶(hù):ID20240001-A用戶(hù)
在線(xiàn)用戶(hù):ID20240002-B用戶(hù)
在線(xiàn)用戶(hù):ID20240003-C用戶(hù)
在線(xiàn)用戶(hù):ID20240004-D用戶(hù)
6、靜態(tài)類(lèi)
以static關(guān)健字修飾符定義的類(lèi),靜態(tài)類(lèi)主要特性有不能實(shí)例化、僅包含靜態(tài)成員、密封的、不能包含實(shí)例構(gòu)造函數(shù)。
using System;
using System.IO;
namespace Fountain.Net.Base.Sample
{
/// <summary>
/// 靜態(tài)類(lèi)
/// </summary>
public static class Logs
{
// 靜態(tài)字段 當(dāng)前程序的執(zhí)行路徑
private static string path=System.AppDomain.CurrentDomain.BaseDirectory;
/// <summary>
/// 寫(xiě)日志內(nèi)容的靜態(tài)方法
/// </summary>
/// <param name="content">內(nèi)容</param>
public static void Writting(string content)
{
try
{
// 根據(jù)日期定義文件名稱(chēng)
string filename = string.Format("{0}.log",DateTime.Now.ToString("yyyyMMddHH"));
// 將內(nèi)寫(xiě)轉(zhuǎn)成字節(jié)
byte[] contentArray = System.Text.Encoding.UTF8.GetBytes(content);
// 創(chuàng)建文件流
using (FileStream fileStream = new FileStream(path + Path.DirectorySeparatorChar + filename, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
{
fileStream.Seek(0, System.IO.SeekOrigin.End);
// 寫(xiě)入流
fileStream.Write(contentArray, 0, contentArray.Length);
}
}
catch(Exception exception)
{
throw new Exception(exception.Message);
}
}
}
}
// 應(yīng)用
// 靜態(tài)類(lèi) 不用創(chuàng)建實(shí)列直接調(diào)用
Logs.Writting("測(cè)試靜態(tài)類(lèi)的調(diào)用");
小結(jié)
以上是C#中面向?qū)ο蠡A(chǔ)的類(lèi)的全部?jī)?nèi)容,希望對(duì)大家理解類(lèi)一定的參考借鑒價(jià)值, 敬請(qǐng)關(guān)注后續(xù)內(nèi)容。
該文章在 2024/3/26 18:53:27 編輯過(guò)