C#类中的属性使用总结(详解类的属性)

 更新时间:2014年03月21日 14:16:14   作者:  
属性是一种类的成员,它的实现类似函数,访问类似字段。它的作用是提供一种灵活和安全的机制来访问,修改私有字段。所以属性必须依赖于字段

复制代码 代码如下:

private int dd; 
public int dd 

    get{ return xx*3;} 
    set{ xx = value/3;} 

没有set的属性是一种只读属性,没有get的访问器是一种只写属性。
(1) get访问器用来返回字段或者计算 并返回字段,它必须以return或者throw终结。
复制代码 代码如下:

private string name; 
public string Name 

    get 
    { 
        return name != null ? name : "NA"; 
    } 

(2) set访问器类似返回类型为void的函数,使用value的隐式参数
复制代码 代码如下:

private string name;  // the name field 
    public string Name    // the Name property 
    { 
        get 
        { 
            return name; 
        } 
        set 
        { 
            name = value; 
        } 
    }

(3) 访问器的限制
属性访问标记可以为public,private,protected,internal,protected internal,因为访问器的访问限制必须比属性的访问限制更加严格,所以
复制代码 代码如下:

private int xx; 
      public int sxx 
      { 
          public get { return xx; }//error 
          set { xx = value; } 
      } 

不能对接口或者显式的接口使用访问修饰符,因为接口里里面所有的默认是public的;
同时具有get,set访问器时,才允许使用访问修饰符,并且只能有一个使用;
如果属性有override修饰的时候,访问器修饰符必须与被重写的匹配。
访问器的可访问级别必须比属性的可访问级别更加严格

理解:
首先第四条最容易想到,也是很合理的,毕竟是外围的决定内部的。
其次,既然第四条可以理解,那么如果只有一个访问器的时候,访问器访问级别等同属性,如果这个时候再去指  定更加严格的访问级别,那么为何不当初在属性上指定呢?
      这条理解了,那么为什么必须同时具有get,set才能添加访问修饰符就更加明确了。

推理:
接口中属性是public的,那么如果接口中只有一个get或者set的时候,我们可以在继承中指明另一个访问器的属   性。但是如果接口中同时具有get,set,那么按照派生和继承的匹配性,这时候就不能这样再指定访问器的访问限制了。

复制代码 代码如下:

public interface ISomeInterface 

    int TestProperty 
    { 
        // No access modifier allowed here 
        // because this is an interface. 
        get; 
    } 


 
public class TestClass : ISomeInterface 

    public int TestProperty 
    { 
        // Cannot use access modifier here because 
        // this is an interface implementation. 
        get { return 10; } 

 
        // Interface property does not have set accessor, 
        // so access modifier is allowed. 
        protected set { } 
    } 

(4)可以用static 修饰属性,以便随时访问

复制代码 代码如下:

private static int counter; 
public static int Counter 
    { 
        get { return counter; } 
    } 

(5)属性隐藏
复制代码 代码如下:

public class Employee 

    private string name; 
    public string Name 
    { 
        get { return name; } 
        set { name = value; } 
    } 


 
public class Manager : Employee 

    private string name; 

 
    // Notice the use of the new modifier: 
    public new string Name // use new to hide property in base class 
    { 
        get { return name; } 
        set { name = value + ", Manager"; } 
    } 

(6)virtual来修饰属性,派生类使用override来重写属性

复制代码 代码如下:

public class Parent 

    public virtual int TestProperty 
    { 

        protected set { } 
        get { return 0; } 
    } 

public class Kid : Parent 

    public override int TestProperty 
    { 
        protected set { } 
        get { return 0; } 
    } 

(7) abstract 修饰属性,派生类来实现属性

复制代码 代码如下:

abstract class Shape 

    public abstract double Area 
    { 
        get; 
        set; 
    } 


 
class Square : Shape 

    public double side; 
    public override double Area 
    { 
        get 
        { 
            return side * side; 
        } 
        set 
        { 
            side = System.Math.Sqrt(value); 
        } 
    } 

(8)sealed 修饰属性,派生类不能修改属性

(9)接口属性
接口属性不具有函数体

复制代码 代码如下:

public interface Inters 

    string Name 
    {    
        get; 
        set; 
    } 

(10) 自动属性
当属性访问器中不需要其他访问逻辑时候,就可以使用自动属性,使代码更加简洁

复制代码 代码如下:

public double TotalPurchases { get; set; } 
public string Name { get; set; } 
public int CustomerID { get; set; }

相关文章

  • C# 格式化字符首字母大写的方法

    C# 格式化字符首字母大写的方法

    这篇文章介绍了C# 格式化字符首字母大写的方法,有需要的朋友可以参考一下
    2013-08-08
  • 实例解析C#设计模式编程中简单工厂模式的使用

    实例解析C#设计模式编程中简单工厂模式的使用

    这篇文章主要介绍了C#设计模式编程中简单工厂模式的使用,文中也举了在.NET框架下简单工厂模式的实现例子,需要的朋友可以参考下
    2016-02-02
  • C#批量插入数据到Sqlserver中的三种方式

    C#批量插入数据到Sqlserver中的三种方式

    这篇文章主要为大家详细介绍了C#批量插入数据到Sqlserver中的三种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • 详解C#使用AD(Active Directory)验证内网用户名密码

    详解C#使用AD(Active Directory)验证内网用户名密码

    这篇文章主要介绍了详解C#使用AD(Active Directory)验证内网用户名密码的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • C#实现托盘程序并禁止多个应用实例运行的方法

    C#实现托盘程序并禁止多个应用实例运行的方法

    这篇文章主要介绍了C#实现托盘程序并禁止多个应用实例运行的方法,涉及C#中NotifyIcon控件的使用及设置标志位控制程序只运行一个的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • C#中的ICustomFormatter及IFormatProvider接口用法揭秘

    C#中的ICustomFormatter及IFormatProvider接口用法揭秘

    这篇文章主要介绍了C#中的ICustomFormatter及IFormatProvider接口用法揭秘,本文能过分析一段代码得出一些研究结果,需要的朋友可以参考下
    2015-06-06
  • C#实现对字符串进行大小写切换的方法

    C#实现对字符串进行大小写切换的方法

    这篇文章主要介绍了C#实现对字符串进行大小写切换的方法,涉及C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • C#实现网络小程序的步骤详解

    C#实现网络小程序的步骤详解

    经常要检测某些IP地址范围段的计算机是否在线。有很多的方法,比如进入到网关的交换机上去查询、使用现成的工具或者编写一个简单的DOS脚本等等,这些都比较容易实现。本文将用C#来实现,感兴趣的可以了解一下
    2022-12-12
  • C# 字典Dictionary的具体用法

    C# 字典Dictionary的具体用法

    本文主要介绍了C# 字典Dictionary的具体用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • C#异步原理详情

    C#异步原理详情

    这篇文章主要介绍了C#异步原理,C#异步在C#5便发布了,是利用async关键字和await表达式表达的异步操作,下面文章下边将详细向大家介绍C#异步原理,感兴趣得小伙伴可以参考一下
    2021-10-10

最新评论