C# 属性
来源:互联网 发布:传承的重要性 知乎 编辑:程序博客网 时间:2024/06/05 16:56
C# 编程指南
属性(C# 编程指南)
属性是这样的成员:它们提供灵活的机制来读取、编写或计算私有字段的值。可以像使用公共数据成员一样使用属性,但实际上它们是称为“访问器”的特殊方法。这使得数据在可被轻松访问的同时,仍能提供方法的安全性和灵活性。
在本示例中,类 TimePeriod 存储了一个时间段。类内部以秒为单位存储时间,但提供一个称为 Hours 的属性,它允许客户端指定以小时为单位的时间。Hours 属性的访问器执行小时和秒之间的转换。
示例
C#
复制代码
class TimePeriod{ private double seconds; public double Hours { get { return seconds / 3600; } set { seconds = value * 3600; } }}class Program{ static void Main() { TimePeriod t = new TimePeriod(); // Assigning the Hours property causes the 'set' accessor to be called. t.Hours = 24; // Evaluating the Hours property causes the 'get' accessor to be called. System.Console.WriteLine("Time in hours: " + t.Hours); }}
输出
Time in hours: 24
属性概述
属性使类能够以一种公开的方法获取和设置值,同时隐藏实现或验证代码。
get 属性访问器用于返回属性值,而 set 访问器用于分配新值。这些访问器可以有不同的访问级别。有关更多信息,请参见访问器可访问性。
value 关键字用于定义由 set 索引器分配的值。
不实现 set 方法的属性是只读的
c#属性详解(写一个文章来回顾下知识点)
C#属性是对类中的字段(fields)的保护,像访问字段一样来访问属性。同时 也就封装了类的内部数据
感觉起来它很烦琐,因为每次访问的时候 1 个field就需调用2个方法。有了属性就不用这样麻烦了。
属性的类型:1.读写属性 2.只读属性 3只写属性(他的诞生是错误的) 4.静态属性
属性的声明:【访问符号】(static) 数据类型 属性名
{
set{};
get{};
}
属性的特点:每当赋值运算的时候自动调用set访问器,其他时候则调用get访问器。 以帕斯卡命名 不能冠以Get Set
注意:静态属性是通过类名调用的哦 下面的一个例子里面具体有展示 请仔细阅读
using System;
using System.Collections.Generic;
using System.Text;
namespace Example_1
{
class age
{
private int _age;
public void SetAge(int a)
{
if (a < 0)
{
Console.WriteLine("must an +int");
}
else
{
_age = a;
}
}
public int GetAge()
{
return _age;
}
}
class TestAge
{
[STAThread]
static void main(string[] args)
{
age Age = new age();
Console.WriteLine("请输入年龄:");
Age.SetAge(Int32.Parse( Console.ReadLine()));
int a = Age.GetAge();
Console.WriteLine("{0}",a);
}
}
}
上面的例子是假如没有属性时候 ,我们限制对字段的访问。using System.Collections.Generic;
using System.Text;
namespace Example_1
{
class age
{
private int _age;
public void SetAge(int a)
{
if (a < 0)
{
Console.WriteLine("must an +int");
}
else
{
_age = a;
}
}
public int GetAge()
{
return _age;
}
}
class TestAge
{
[STAThread]
static void main(string[] args)
{
age Age = new age();
Console.WriteLine("请输入年龄:");
Age.SetAge(Int32.Parse( Console.ReadLine()));
int a = Age.GetAge();
Console.WriteLine("{0}",a);
}
}
}
感觉起来它很烦琐,因为每次访问的时候 1 个field就需调用2个方法。有了属性就不用这样麻烦了。
属性的类型:1.读写属性 2.只读属性 3只写属性(他的诞生是错误的) 4.静态属性
属性的声明:【访问符号】(static) 数据类型 属性名
{
set{};
get{};
}
属性的特点:每当赋值运算的时候自动调用set访问器,其他时候则调用get访问器。 以帕斯卡命名 不能冠以Get Set
注意:静态属性是通过类名调用的哦 下面的一个例子里面具体有展示 请仔细阅读
using System;
namespace Example_1
{
class SavingsAccount
{
//用于存储帐户号码、余额和已获利息的类字段。
private int _accountNumber;
private double _balance;
private double _interestEarned;
// 利率是静态的,因为所有的帐户都使用相同的利率
private static double _interestRate;
// 构造函数初始化类成员
public SavingsAccount(int accountNumber, double balance)
{
this._accountNumber = accountNumber;
this._balance = balance;
}
// AccountNumber只读属性
public int AccountNumber
{
get
{
return _accountNumber;
}
}
// Balance 只读属性
public double Balance
{
get
{
if (_balance < 0)
Console.WriteLine("无余额");
return _balance;
}
}
// InterestEarned 读/写属性
public double InterestEarned
{
get
{
return _interestEarned;
}
set
{
// 验证数据
if (value < 0.0)
{
Console.WriteLine("InterestEarned 不能为负数");
return;
}
_interestEarned = value;
}
}
// InterestRate 读/写属性为静态,
// 因为所有特定类型的帐户都具有相同的利率
public static double InterestRate
{
get
{
return _interestRate;
}
set
{
// 验证数据
if (value < 0.0)
{
Console.WriteLine("InterestRate 不能为负数");
return;
}
else
{
_interestRate = value / 100;
}
}
}
}
class TestSavingsAccount
{
/// <摘要>
/// 应用程序的主入口点。
/// </摘要>
[STAThread]
static void Main(string[] args)
{
// 创建 SavingsAccount 的对象
SavingsAccount objSavingsAccount = new SavingsAccount(12345, 5000);;
// 用户交互
Console.WriteLine("输入到现在为止已获得的利息和利率");
objSavingsAccount.InterestEarned = Int64.Parse(Console.ReadLine());
SavingsAccount.InterestRate = Int64.Parse(Console.ReadLine());
// 使用类名访问静态属性
objSavingsAccount.InterestEarned += objSavingsAccount.Balance * SavingsAccount.InterestRate;
Console.WriteLine("获得的总利息为: {0}", objSavingsAccount.InterestEarned);
}
}
}
namespace Example_1
{
class SavingsAccount
{
//用于存储帐户号码、余额和已获利息的类字段。
private int _accountNumber;
private double _balance;
private double _interestEarned;
// 利率是静态的,因为所有的帐户都使用相同的利率
private static double _interestRate;
// 构造函数初始化类成员
public SavingsAccount(int accountNumber, double balance)
{
this._accountNumber = accountNumber;
this._balance = balance;
}
// AccountNumber只读属性
public int AccountNumber
{
get
{
return _accountNumber;
}
}
// Balance 只读属性
public double Balance
{
get
{
if (_balance < 0)
Console.WriteLine("无余额");
return _balance;
}
}
// InterestEarned 读/写属性
public double InterestEarned
{
get
{
return _interestEarned;
}
set
{
// 验证数据
if (value < 0.0)
{
Console.WriteLine("InterestEarned 不能为负数");
return;
}
_interestEarned = value;
}
}
// InterestRate 读/写属性为静态,
// 因为所有特定类型的帐户都具有相同的利率
public static double InterestRate
{
get
{
return _interestRate;
}
set
{
// 验证数据
if (value < 0.0)
{
Console.WriteLine("InterestRate 不能为负数");
return;
}
else
{
_interestRate = value / 100;
}
}
}
}
class TestSavingsAccount
{
/// <摘要>
/// 应用程序的主入口点。
/// </摘要>
[STAThread]
static void Main(string[] args)
{
// 创建 SavingsAccount 的对象
SavingsAccount objSavingsAccount = new SavingsAccount(12345, 5000);;
// 用户交互
Console.WriteLine("输入到现在为止已获得的利息和利率");
objSavingsAccount.InterestEarned = Int64.Parse(Console.ReadLine());
SavingsAccount.InterestRate = Int64.Parse(Console.ReadLine());
// 使用类名访问静态属性
objSavingsAccount.InterestEarned += objSavingsAccount.Balance * SavingsAccount.InterestRate;
Console.WriteLine("获得的总利息为: {0}", objSavingsAccount.InterestEarned);
}
}
}
- C#属性
- c# 属性
- C# 属性
- C#属性
- C#属性
- C# 属性
- C#属性
- c#属性
- C#属性
- C#属性
- C#属性
- C#属性
- C# 属性
- C#属性
- c#属性
- C# 属性
- C# 属性
- C#属性
- 多条记录合并为一条,同时将连续的编号写成“起始编号-结束编号”的形式
- flex 自定义事件
- Doors 和RequisitePro使用比较报告(个人观点)
- ie6 window.resize 事件无效
- 如何写优雅的代码(1)——灵活使用goto和__try
- C# 属性
- Google to let you comment on anything, anywhere
- 字段、属性
- jndi
- 作好SQL的安全管理-转
- js获取Session值 (补充)
- TEST
- AUTZC
- 如何写优雅的代码(2)——#define?const?还是enum?