• 友链

  • 首页

  • 文章归档
h u a n b l o g
h u a n b l o g

欢

HI,Friend

04月
11
C#

属性

发表于 2022-04-11 • 字数统计 2253 • 被 1,371 人看爆

概念

类中的一个数据项的成员。写入和读取与字段相同

例

MyClass mc = new MyClass();
mc.MyField = 5;
mc.MyProperty = 10;

特征

  • 它是命名的类成员。
  • 它有类型。
  • 它可以被赋值和读取。

和字段不同

  • 它不为数据存储分配内存!
  • 它执行代码。

访问器

是指定的一组两个匹配、称为访问器的方法
  • set访问器为属性赋值。
  • get访问器从属性获取值。

例

int MyValue
{
    set
    {
        //void类型
    }

    get
    {
        //返回属性类型的值

    }
}

属性声明和访问器

可以把set访问器想象成一个方法,带有单一的参数"设置"属性的值
get访问器没有参数并从属性返回一个值

set访问器

  • 拥有一个单独的、隐式的值参,名称为value,与属性的类型相同;
  • 拥有一个返回类型void。

get访问器

  • 没有参数;
  • 拥有一个与属性类型相同的返回类型。

实例

class C1
{
    private int theTralVaule;
    public int MyValue
    {
        set {
            theTralVaule = vaule;
        }

        get {
            return theTralVaule;
        }
    }
}

使用

MyValue = 5;        //隐式调用set
z = MyValue;        //隐式调用get

只能隐式调用get/set,不能显示调用

属性和只读属性

要想不定义属性的某个访问器,可以忽略该访问器的声明。
  • 只有get访问器的属性称为只读属性。只读属性是一种安全的,把一项数据从类或类的实例中传出,而不允许太多访问方法。
  • 只有set访问器的属性称为只写属性。只写属性是一种安全的,把一项数据从类的外部传入类,而不允许太多访问的方法。
  • 两个访问器中至少有一个必须定义,否则编译器会产生一条错误信息。

属性和公共字段

  • 属性是函数型成员而不是数据成员,允许你处理输入和输出,而公共字段不行。
  • 属性可以只读或只写,而字段不行。
  • 编译后的变量和编译后的属性语义不同。

自动实现属性

运行只声明属性而不声明后备字段(和属性关联的字段,如上面的theTralVaule字段),编译器会自动为你创建隐藏的后备字段,并且自动挂到get和set访问器上

规则

  • 不声明后备字段——编译器根据属性的类型分配存储。
  • 不能提供访问器的方法体——它们必须被简单地声明为分号。get担当简单的内存读,set担当简单的写。
  • 除非通过访问器,否则不能访问后备字段。因为不能用其他的方法访问它,所以实现只读和只写属性没有意义,因此必须同时提供读写访问器。

示例

class C1
{
    public int MyValue
    {
        set;get;
    }
}

static void Main() {
    C1 c = new C1();
    c.MyValue = 10;     //赋值属性
    Console.WriteLine($"{c.MyValue}");      //读属性
}

静态属性

静态属性的访问器和所有静态成员一样,可以使用static

规则

  • 不能访问类的实例成员——虽然它们能被实例成员访问。
  • 不管类是否有实例,它们都是存在的。
  • 当从类的外部访问时,必需使用类名引用,而不是实例名。

例

class Trivial
{
    public static int MyValue { get; set; }
    public void PrintVaule()
    {
        Console.WriteLine($"Vaule:{MyValue}");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine($"Vaule:{Trivial.MyValue}");
        Trivial.MyValue = 10;
        Console.WriteLine($"Vaule:{Trivial.MyValue}");
        Trivial tr = new Trivial();
        tr.PrintVaule();

        Console.ReadKey();
    }
}

结果

Vaule:0
Vaule:10
Vaule:10

分享到:
构造函数和析构函数
参数
  • 文章目录
  • 站点概览
欢

网红 欢

你能抓到我么?

Email RSS
看爆 Top5
  • mac系统版本与Xcode版本有冲突 4,091次看爆
  • JAVA_HOME环境配置问题 3,741次看爆
  • AssetBundle使用 3,509次看爆
  • VSCode配置C++开发环境 3,264次看爆
  • Lua反射 3,140次看爆

Copyright © 2025 欢 粤ICP备2020105803号-1

由 Halo 强力驱动 · Theme by Sagiri · 站点地图