问题:C#属性;结果:c# 属性

c# 属性 

属性:get { //读属性代码 } set { //写属性代码 }
public class Person
{
private string name;
public string Name
{
   get{return  name;}
   set{ name=value;}
}
}
属性可以忽略get或set访问器,但是不能两个都忽略.
set访问器包含一个隐藏的参数value,该参数包含从客户代码传送过来的值.
公共属性及其底层类型最好使用相同的名称,因为它们之间的联系将很清晰.

字段使用camelCase(xxXxx),如dateOfBirth,而属性使用PacalCase(XxXxx),如DateOfBirth.一些开发人员喜欢在字段的开头使用下划线,如_Name,属性也应使用名词来命名.

c#通过属性特性读取和写入字段,而不直接读取和写入,以此来提供对类中字段的保护.

属性按可以访问的类型分为三种不同的类型:

一.读/写属性

读/写属性是一个具有get()和set()访问器的属性.

语法:  [访问修饰符] 数据类型 属性 
{
get{ };
set{ };
}

二.只读属性

仅具有get()访问器属性称为只读属性.

语法: [访问修饰符] 数据类型 属性名

get{ };
}

三.只写属性

仅具有set()访问器属性称为只写属性,不推荐使用只写属性.

语法: [访问修饰符] 数据类型 属性名
{
 set{ };
}
示例:

using System;

namespace Example1
{
 class Student
 {
  #region/***属性***/
  /// <summary>
  /// 姓名
  /// </summary>
  private string name;
  public string Name
  {
   get
   {
    return name;
   }

set
   {
    if(value.length<40)
    {
     Console.WriteLine("学生姓名长度不能小于4个!");
     return;
    }
    name=value;
   }
  }
  #region

static void Main(string[ ] args)
  {
   Student student=new Student();
   student.Name=Console.ReadLine();
  }
 }
}

属性(property)
-充分体现了对象的封装性:不直接操作类的数据内容,而是通过访问器进行访问,即借助于get和set对属性的值进行读写;另一方面还可以对数据的访问属性进行控制(当然也可以通过对普通域加readonly关键字来实现。
-设计原则:属性封装了对域的操作。把要访问的域设为private,通过属性中的get和set操作对域进行设置或访问。
-不能把属性作为引用类型或输出参数来进行传递。
-get方法没有参数;set方法有一个隐含的参数value。除了使用了abstract修饰符的抽象属性,每个访问器的执行体中只有分号“;”外,其他的所有属性的get访问器都通过return来读取属性的值,set访问器都通过value来设置属性的值。
-采用间接方式来访问对象的属性(间接调用get、set方法):对象.属性 = 值(调用set),变量 = 对象.属性(调用get)。
-在属性的访问声明中:
只有set访问器,表明该属性是只写的。
只有get访问器,表明该属性是只读的。
既有set访问器,又有get访问器,表明该属性是可读可写的。
private string s_filename;
       public string Filename
       {
              get
              {
                     return s_filename;
    }//get
    set
    {
          if(s_filename!=value)
          {
                s_filename = value;
     }//if
    }//set
   }//Filename
  }

l      属性和字段的比较:

Ø       属性不能使用ref/out 型参数

Ø       属性使用前必须赋值

属性使用前必须赋值,例如:

Time lunch;

lunch.Hour = 12;//错误,lunch没有初始化

属性vs.函数

l       相似点

Ø       都包含执行代码

Ø       都可以有访问修饰符

Ø       都可以有virtual, abstract, override 修饰符

Ø       都可以用在接口中

l       不同点

Ø       属性只能拥有get/set 语句

Ø       属性不可以是void 型

Ø       属性不能使用参数

Ø       属性不能使用[ ] 参数

Ø       属性不能使用括号
public int Hour

{

...

set
{

if (value < 0 || value > 24)

throw new ArgumentException("value");

hour = value;

}

类的属性称为智能字段,类的索引器称为智能数组。由于类本身作数组使用,所以用
this作索引器的名称,索引器有索引参数值。例:
using System;
using System.Collections;

class MyListBox
{
  protected ArrayList data = new ArrayList();
  public object this[int idx]  //this作索引器名称,idx是索引参数
  {
    get
    {
      if (idx > -1 && idx < data.Count)
      {
        return data[idx];
      }
      else
      {
        return null;
      }
    }
    set
    {
      if (idx > -1 && idx < data.Count)
      {
        data[idx] = value;
      }
      else if (idx = data.Count)
      {
        data.Add(value);
      }
      else
      {
        //抛出一个异常
      }
    }
  }
}

}

尽可能编写出运行效率更高,更健壮,更容易维护的C#代码。

尽可能的使用属性(property),而不是数据成员(field)。

private   int   property1  
  public     int   Property1  
    {    
        get  
        {  
          return   property1   ;  
          }  
        set  
          {  
            if   (value>1)     //这里校验  
                property1=   value   ;  
                else    
                property1=1;  
          }
 }

//实例属性,可读可写
  public int StrCount
  {
   get
   {
    return m_strCount;
   }
   set
   {
    if (value>m_strCount)
    {
     strArray = new string[value];
     for (int i=0;i<value;i++)
     {
      strArray[i] = String.Format("String No.{0}",i);
     }
     m_strCount = value;
    }
   }
  }

private static string m_strName = "MyClass";
  //一个静态属性,只读
  public static string ClassName
  {
   get
   {
    return m_strName;
   }
  }

class B
{
private A _a;
public A item
{
  get
  {
    if(_a=null)
      _a=new A();
    return _a;
  }
  set{_a=value;}
}
}

C#中属性和字段的区别

属性和字段的区别

在C#中,我们可以非常自由的、毫无限制的访问公有字段,但在一些场合中,我们可能希望限制只能给字段赋于某个范围的值、或是要求字段只能读或只能写,或 是在改变字段时能改变对象的其他一些状态,这些单靠字段是无法做到的,于是就有了属性,属性中包含两个块:set和get,set块负责属性的写入工 作,get块负责属性的读取工作。在两个块中都可以做一些其他操作,如在set中验证赋的值是否符合要求并决定是否进行赋值。当缺少其中一块时属性就只能 读或只能写,set和get块中属性必需有一个,因为即不能读又不能写的属性是没有意义的。

class MyClass

{

Private  string  name;

public string Name

{

get {return Name;}

set {Name=value;}

}

}

(1)属性可以保证安全,当不在本类中使用时可以保证使用属性名可以避免

用字段的名字。

(2)属性的set和get函数可以限制字段的一些功能,以达到某种目的。

如:

private int a=0;

public int A

{

get{return this.a;}

set

{

if(value >= 0 && value <= 100)

this.a=value;

else

throw new Exception("值的范围不合法。");

}

}

(3)属性没有存储数据的功能,数据都存在字段中,所以只有修改字段的数据才能更改数据,修改属性的值没用。

时间: 2024-10-18 03:19:22

问题:C#属性;结果:c# 属性的相关文章

Hibernate inverse属性与cascade属性

理解: inverse属性为false的那一端,拥有管理关系维护的权利 cascade属性指级联,说的通俗点,在cascade那端指定的操作,会影响到所关联的对象 举个例子: 班级和学生的关系是一对多 班级class类包含id,名称和学生的Set集合 学生student类包含id,姓名和班级的id(外键) cascade属性:学生是依赖班级存在的,班级不存在,那么学生也不存在.也就是说,删除班级的同时,学生也就得删除,而不能反过来.一的那端删除时,多的那方已经没有意义了:而多的那端删除时,并不能

重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性

[源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性 作者:webabcd介绍重新想象 Windows 8.1 Store Apps 之控件增强 文本类控件的增强 为一些控件增加了 Header 属性和 HeaderTemplate 属性 为一些控件增加了 PlaceholderText 属性 示例1.演示

38属性的种种,只读只写属性、自动属性、静态属性、抽象属性、接口属性

□ 只读属性 public class Example {     string name;     public string Name     {         get {return name;}     } } □ 只写属性 public class Example {     string name;     public string Name     {         set {name = value;}     } } □ 可读可写属性 public class Examp

AngularJS的ng-repeat显示属性名和属性值

代码下载:https://files.cnblogs.com/files/xiandedanteng/AngularJSAuthorRepeat.rar 代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html ng-app="notesApp"> <

PHP.38-TP框架商城应用实例-后台15-商品属性与库存量1-不同商品(唯一属性、可选属性),属性类型

思路: 1.不同商品属于不同的类型,如:手机.服装.电脑等类型 2.不同的类型有不同的属性,其中分为唯一属性和可选属性,如服装:可选属性{尺寸:S,M,L--;颜色:白色,黑色--}唯一属性:材质 首先把类型与属性关联起来 1.建表 类型表{p39_type} drop table if exists p39_type; create table p39_type ( id mediumint unsigned not null auto_increment comment 'Id', type

python基础1-类属性和实例属性

类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,这个和C++中类的静态成员变量有点类似.对于公有的类属性,在类外可以通过类对象和实例对象访问 类属性 class people: name = 'Tom' #公有的类属性 __age = 12 #私有的类属性 p = people() print p.name #正确 print people.name #正确 print p.__age #错误,不能在类外通过实例对象访问私有的类属性 print people

[转]Android ImageView的scaleType属性与adjustViewBounds属性

Android ImageView的scaleType属性与adjustViewBounds属性 ImageView的scaleType的属性有好几种,分别是matrix(默认).center.centerCrop.centerInside.fitCenter.fitEnd.fitStart.fitXY android:scaleType="center" 保持原图的大小,显示在ImageView的中心.当原图的size大于ImageView的size,超过部分裁剪处理. androi

layout_gravity属性和gravity属性区别(转载)

android的 layout_gravity 属性和 gravity属性 有啥区别? LinearLayout有两个非常相似的属性: android:gravity与android:layout_gravity. 他们的区别在于: android:gravity 属性是对该view中内容的限定.比如一个button 上面的text. 你可以设置该text 相对于view的靠左,靠右等位置. android:layout_gravity是用来设置该view相对与父view 的位置.比如一个but

java获取对象属性类型、属性名称、属性值

因为项目需要用到,于是简单封装了一些常用的操作: [java] view plaincopy /** * 根据属性名获取属性值 * */ private Object getFieldValueByName(String fieldName, Object o) { try { String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + field

C#中的类属性和接口属性

类属性 类属性是类成员函数的另一种形式,它的主要任务是实现对数据的间接访问,属性的get块和set块的定义中必须明确指出是对什么数据进行访问.对于自动属性,编译器会自动创建对应的数据字段,并且实现属性的get块和set块. 接口属性 接口中可以定义属性,接口属性可以只拥有get块或set块,如果只指定了set或get访问,那么该接口属性表明,对于外部,它只允许这一种访问,这会对类实现接口属性时产生一种约束,即类中具体定义该接口属性时,其访问权限不能大于接口中指定的权限,虽然类中可以为该接口属性补