- 使用属性
- 如果一个类的成员是私有的, 那么C#中的另一个类将如何读取, 写入或计算该字段的值。
- 如果班级成员是公开的, 则另一个班级可能会滥用该成员。
// C# program to illustrate the problems
// with public and private members
using System;
// public class
public class C1
{// public data members
public int rn;
public string name;
// private field
// private int marks = 35;
}// another public class
public class C2
{// Main Method
public static void Main( string [] args)
{// Creating object of C1 class
C1 obj = new C1();
// setting values to public
// data members of class C1
obj.rn = 10000;
obj.name = null ;
// setting values to private
// data members of class C1
// obj.mark = 0;
// display result
Console.WriteLine( "Name:{0} \nRoll No: {1}" , obj.name, obj.rn);
}
}
输出如下:
Name:
Roll No: 10000
【C#属性使用详细指南和代码示例】说明:在上面可以看到, 类C2可以访问类C1的公共成员, 并且使用C1的对象" obj"可以向成员提供值, 例如Name的值为null, 但是我们不希望它为null 。 C2无法将值提供给成员"标记", 因为它在C1中是私有的。要测试私有成员访问权限, 请删除注释并尝试运行, 你会看到编译器将给出错误。不具有属性的编程语言使用getter和setter方法来提供这种访问机制。
使用属性属性是类成员的特殊类型, 它提供了一种灵活的机制来读取, 写入或计算私有字段的值。属性可以当作公共数据成员使用, 但实际上它们是称为存取器。这使数据易于访问, 并有助于提高方法的灵活性和安全性。信息的封装和隐藏也可以使用属性来实现。它使用预定义的方法(即" get"和" set"方法)来帮助访问和修改属性。
存取器:"设置"和"获取"的块称为"访问器"。限制财产的可及性非常重要。访问器有两种类型, 即获取访问者和设置访问器。基于"获取"和设置访问器的属性有不同类型:
- 读写属性:当property同时包含get和set方法时。
- 只读属性:当属性仅包含get方法时。
- 只写属性:当属性仅包含set方法时。
- 自动实施的属性:当属性访问器中没有其他逻辑时, 它将在C#3.0中引入。
<
access_modifier>
<
return_type>
<
property_name>
{
get { // body }
set { // body }
}
其中, < access_modifier> 可以是公共的, 私有的, 受保护的或内部的。 < return_type> 可以是任何有效的C#类型。 < property_name> 可以是用户定义的。属性可以是不同的访问修饰符, 例如public, private, protected, internal。访问修饰符定义类的用户如何访问属性。相同属性的get和set访问器可能具有不同的访问修饰符。财产可被宣布为静态属性通过使用static关键字或可以标记为虚拟财产通过使用虚拟关键字。
获取访问者:
它指定一个字段的值可以公开访问。它返回一个值, 并指定只读属性
例子:
class Geeks {
// Declare roll_no field
private int roll_no;
// Declare roll_no property
public int Roll_no
{ get
{
return roll_no;
}}
}
设置访问器:
它将为属性中的私有字段指定值的分配。它返回一个值, 并指定只写属性
例子:
class Geeks {// Declare roll_no field
private int roll_no;
// Declare roll_no property
public int Roll_no
{ get
{
return roll_no;
}set
{
roll_no = value;
}
}
}
访问器可访问性
- 我们不能在接口或显式接口成员实现上使用访问修饰符。
- 仅当属性同时具有set和get访问器时, 我们才能使用accessor修饰符。
- 如果该属性是覆盖修改器, 则访问器修改器必须与覆盖的访问器的访问器匹配。
- 访问者上的可访问性级别必须比属性上的可访问性级别更具限制性。
程序1:为了演示使用" get"访问器的只读属性。
// C# program to illustrate the
// read-only property
using System;
public class Student {// Declare counter field as cnt
private static int cnt;
// to define constructor
public Student()
{// increment the counter
// using constructor
cnt++;
}// Declare counter property
public static int Counter
{// read-only property
get
{
return cnt;
}
}
}class StudentTest {// Main Method
public static void Main( string [] args)
{// create three instances of
// Student class it call constructor
// three times which increase the counter
Student s1 = new Student();
Student s2 = new Student();
Student s3 = new Student();
// s1.Counter = 10;
// Compile Time Error: Can't set value of
// Counter because it is read only.Console.WriteLine( "Total No of Student: " + Student.Counter);
// Program Give Warning
// The variable `s1' is assigned but its value is never used
}
}
输出如下:
Total No of Student: 3
程式2:为了演示使用" get"和" set"访问器的读写属性。
// C# program to illustrate the
// read and wirte property
using System;
public class Student {// Declare name field
private string name = "lsbin" ;
// Declare name property
public string Name
{get
{
return name;
}set
{
name = value;
}
}
}class TestStudent {// Main Method
public static void Main( string [] args)
{
Student s = new Student();
// calls set accessor of the property Name, // and pass "GFG" as value of the
// standard field 'value'.
s.Name = "GFG" ;
// displays GFG, Calls the get accessor
// of the property Name.
Console.WriteLine( "Name: " + s.Name);
}
}
输出如下:
Name: GFG
推荐阅读
- Java中的运算符用法详细指南
- Tkinter开发简介 – Python GUI开发
- 1mg面试经验详细分享和介绍(校外)
- jQuery如何使用clone()方法(代码示例)
- Python GUI应用程序中的分层树视图(代码示例)
- 算法设计(如何计算下一个更高频率的元素())
- 系统之家一键安装windows7系统图文详细教程图解
- windows7系统正版永久激活码大全制作详细说明
- win7 64位旗舰版激活系统图文详细教程图解