類
類是自定義數據類型的藍圖,對現實生活中一類具有共同特征的事物的抽象。它是面向對象中的概念,是面向對象編程的基礎。
類是一種數據結構,包含了數據成員(字段、常量)和函數成員(方法、屬性、索引器、事件、運算符、構造函數、析構函數和靜態構造函數)。類的類型是支持繼承。
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 編輯過