自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

我們一起深入理解 C# 中的屬性與方法

開發(fā) 前端
我們深入了解了C#中屬性和方法的使用方式。屬性使得我們可以優(yōu)雅地控制對類內(nèi)部數(shù)據(jù)的訪問和修改,并確保數(shù)據(jù)的有效性。方法則定義了類的行為,承擔(dān)了執(zhí)行操作和業(yè)務(wù)邏輯的職責(zé)。

在C#編程中,屬性(Property)和方法(Method)是定義類和對象行為的兩個關(guān)鍵概念。它們使程序能夠封裝數(shù)據(jù)、實現(xiàn)功能并確保代碼的健壯性和可維護(hù)性。本文將詳細(xì)介紹屬性和方法的應(yīng)用特點,探討它們在不同場景下的使用,并通過多個示例展示如何在實際編程中有效運用屬性和方法。

屬性(Property)

屬性提供了一種控制對類中私有字段的訪問方式,允許在讀取或?qū)懭胫禃r執(zhí)行自定義邏輯,如數(shù)據(jù)驗證。屬性使得類的使用者可以像訪問公共字段一樣訪問數(shù)據(jù),但同時保留了封裝的優(yōu)勢。

屬性的基本用法

public class Person
{
    private string name; // 私有字段

    public string Name
    {
        get { return name; } // 獲取器:返回私有字段的值
        set { name = value; } // 設(shè)置器:設(shè)置私有字段的值
    }
}

示例:

internal class Program
{
    static void Main(string[] args)
    {
        Person person = new Person();
        person.Name = "Alice"; // 設(shè)置屬性值
        Console.WriteLine($"Person's name: {person.Name}"); // 獲取屬性值
    }
}

輸出:

圖片圖片

自動屬性

當(dāng)屬性的獲取和設(shè)置不需要額外的邏輯時,可以使用自動屬性簡化代碼。

public class Person
{
    public string Name { get; set; } // 自動屬性
}

示例:

Person person = new Person();
person.Name = "Bob";
Console.WriteLine($"Person's name: {person.Name}");

輸出:

圖片圖片

只讀和只寫屬性

  • 只讀屬性:只有g(shù)et訪問器,外部代碼只能讀取,不能修改。
  • 只寫屬性:只有set訪問器,外部代碼只能設(shè)置,不能讀取。

只讀屬性示例:

public class Product
{
    private readonly string id = Guid.NewGuid().ToString();

    public string ID
    {
        get { return id; }
    }
}

示例:

Product product = new Product();
Console.WriteLine($"Product ID: {product.ID}");

輸出:

圖片圖片

屬性中的數(shù)據(jù)驗證

可以在屬性的設(shè)置器中添加數(shù)據(jù)驗證邏輯,確保屬性值的有效性。

public class Circle
{
    private double radius;

    public double Radius
    {
        get { return radius; }
        set
        {
            if (value > 0)
            {
                radius = value; // 僅當(dāng)值合法時才設(shè)置
            }
            else
            {
                throw new ArgumentException("半徑必須大于零。"); // 否則拋出異常
            }
        }
    }
}

示例:

internal class Program
{
    static void Main(string[] args)
    {
        try
        {
            Circle circle = new Circle();
            circle.Radius = -5; // 嘗試設(shè)置非法值
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

輸出:

圖片圖片

方法(Method)

方法定義了類的行為,封裝了執(zhí)行特定操作的代碼邏輯。方法可以接受參數(shù)、執(zhí)行運算并返回結(jié)果。

方法的基本使用

public class Calculator
{
    // 加法方法,接受兩個整數(shù)參數(shù)并返回它們的和
    public int Add(int a, int b)
    {
        return a + b;
    }
}

示例:

internal class Program
{
    static void Main(string[] args)
    {
        Calculator calculator = new Calculator();
        int sum = calculator.Add(3, 5);
        Console.WriteLine($"3 + 5 = {sum}");
    }
}

輸出:

圖片圖片

帶有多個方法的類

public class MathOperations
{
    // 乘法方法
    public int Multiply(int a, int b)
    {
        return a * b;
    }

    // 除法方法
    public double Divide(double a, double b)
    {
        if (b == 0)
        {
            throw new DivideByZeroException("除數(shù)不能為零。");
        }
        return a / b;
    }
}

示例:

internal class Program
{
    static void Main(string[] args)
    {
        MathOperations mathOps = new MathOperations();
        int product = mathOps.Multiply(4, 6);
        Console.WriteLine($"4 * 6 = {product}");

        try
        {
            double quotient = mathOps.Divide(10, 0);
        }
        catch (DivideByZeroException ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

輸出:

圖片圖片

方法的重載

方法重載允許在同一類中創(chuàng)建多個同名方法,但參數(shù)列表必須不同。

public class Logger
{
    // 日志方法:記錄字符串消息
    public void Log(string message)
    {
        Console.WriteLine($"Message: {message}");
    }

    // 日志方法:記錄異常信息
    public void Log(Exception ex)
    {
        Console.WriteLine($"Exception: {ex.Message}");
    }
}

示例:

internal class Program
{
    static void Main(string[] args)
    {
        Logger logger = new Logger();
        logger.Log("This is a simple message.");

        try
        {
            int y = 0;
            int result = 10 / y;
        }
        catch (Exception ex)
        {
            logger.Log(ex);
        }
    }
}

輸出:

圖片圖片

靜態(tài)方法與實例方法

  • 實例方法:必須通過對象實例調(diào)用,方法內(nèi)部可以訪問實例成員。
  • 靜態(tài)方法:通過類名調(diào)用,不需要創(chuàng)建實例,不能訪問實例成員。

靜態(tài)方法示例:

public class Utility
{
    public static void DisplayTime()
    {
        Console.WriteLine($"Current Time: {DateTime.Now}");
    }
}

示例:

internal class Program
{
    static void Main(string[] args)
    {
        Utility.DisplayTime();
    }
}

輸出:

圖片圖片

屬性與方法的綜合應(yīng)用

public class BankAccount
{
    private decimal balance;

    public string AccountNumber { get; } // 只讀屬性
    public string Owner { get; set; } // 自動屬性

    public decimal Balance
    {
        get { return balance; }
        private set { balance = value; } // 私有設(shè)置器,只能在類內(nèi)部修改
    }

    public BankAccount(string owner, decimal initialBalance)
    {
        AccountNumber = Guid.NewGuid().ToString();
        Owner = owner;
        Balance = initialBalance;
    }

    public void Deposit(decimal amount)
    {
        if (amount > 0)
        {
            Balance += amount;
            Console.WriteLine($"已存入:{amount:C2}");
        }
        else
        {
            Console.WriteLine("存款金額必須大于零。");
        }
    }

    public void Withdraw(decimal amount)
    {
        if (amount > 0 && amount <= Balance)
        {
            Balance -= amount;
            Console.WriteLine($"已取出:{amount:C2}");
        }
        else
        {
            Console.WriteLine("取款金額無效或余額不足。");
        }
    }
}

示例:

internal class Program
{
    static void Main(string[] args)
    {
        BankAccount account = new BankAccount("Charlie", 1000m);
        Console.WriteLine($"賬戶所有者:{account.Owner}");
        Console.WriteLine($"賬戶余額:{account.Balance:C2}");

        account.Deposit(500m);
        Console.WriteLine($"賬戶余額:{account.Balance:C2}");

        account.Withdraw(200m);
        Console.WriteLine($"賬戶余額:{account.Balance:C2}");

        account.Withdraw(1500m); // 嘗試取出超過余額的金額
    }
}

輸出:

圖片圖片

在實際編程中的應(yīng)用場景

  • 數(shù)據(jù)封裝和保護(hù):通過屬性控制對私有字段的訪問,確保數(shù)據(jù)的完整性。
  • 數(shù)據(jù)驗證:在屬性設(shè)置器中添加驗證邏輯,防止無效數(shù)據(jù)。
  • 行為實現(xiàn):使用方法實現(xiàn)類的功能,如計算、數(shù)據(jù)處理和與外部系統(tǒng)的交互。
  • 代碼重用和維護(hù):合理的屬性和方法設(shè)計提高了代碼的可重用性和可維護(hù)性。

注意事項

  • 屬性設(shè)計:

a.使用屬性封裝私有字段,提供必要的訪問控制。

b.在設(shè)置器中進(jìn)行數(shù)據(jù)驗證,確保對象狀態(tài)的有效性。

c.考慮使用只讀或只寫屬性滿足特殊需求。

  • 方法設(shè)計:

a.方法應(yīng)具有明確的職責(zé),避免過于復(fù)雜。

b.使用方法重載提高代碼的靈活性。

c.適當(dāng)使用靜態(tài)方法,提供與實例無關(guān)的功能。

總結(jié)

通過本文的詳細(xì)介紹,我們深入了解了C#中屬性和方法的使用方式。屬性使得我們可以優(yōu)雅地控制對類內(nèi)部數(shù)據(jù)的訪問和修改,并確保數(shù)據(jù)的有效性。方法則定義了類的行為,承擔(dān)了執(zhí)行操作和業(yè)務(wù)邏輯的職責(zé)。

責(zé)任編輯:武曉燕 來源: 技術(shù)老小子
相關(guān)推薦

2024-03-28 08:50:58

Flink分配方式后端

2025-02-13 09:32:12

C#重寫override

2024-11-28 09:57:50

C#事件發(fā)布器

2024-08-26 08:34:47

AES加密算法

2009-09-08 16:25:19

C#委托

2025-01-09 07:54:03

2024-12-23 10:20:50

2021-03-18 00:04:13

C# 類型數(shù)據(jù)

2023-10-10 08:00:07

2024-05-17 12:56:09

C#編程線程

2024-08-30 11:00:22

2025-01-09 12:01:53

2024-10-11 11:54:14

C#編寫異步

2024-12-31 00:07:12

2024-05-11 07:13:33

C#Task編程

2024-06-25 08:33:48

2024-08-07 10:37:24

2024-06-25 08:43:25

C#編程模型

2023-12-31 12:56:02

C++內(nèi)存編程

2013-11-05 13:29:04

JavaScriptreplace
點贊
收藏

51CTO技術(shù)棧公眾號