zoukankan      html  css  js  c++  java
  • C#中的属性,字段,变量

    工作这么长时间,一直对 属性,字段,变量的定义不清晰.今天就详细整理一下.

    C#中的变量

    内存:用户存储正在运行的程序数据RAM(随机存储器)断电后里面的数据丢失

    变量代表这一块内存空间,我们可以通过变量名称向内存存/取数据.有变量就不需要我们记忆复杂的内存地址了.

    先向计算机申请一块内存空间,考虑往内存方的数据类型,向内存申请一块内存空间的语法:

    int number;//申请开辟一块内存空间

    number=1000;//把1000放到number中

    Console.WriteLine(number);

    Console.ReadKey();

    变量可以类中,方法中声明...

    字段

    "字段"是直接在"类"或"结构"中声明的任何类型的变量。字段是其包含类型的"成员".(简单的说,字段就是直接出现在类或结构中的变量)

    类或结构可以拥有实例字段或静态字段.或同时拥有两者。实例字段特定于类型的实例。如果您拥有类T和实例字段F,可以创建类型T的两个对象,并修改每个

    对象中的F的值,这不影响另一对象中的该值.相比之下,静态字段属于类本身,在该类的所有实例中共享.从实例A所做的更改将立刻呈现在实例B和C上(如果他们访问该字段)

    通常应仅为具有私有或受保护可访问性的变量使用字段.您的类向客户端代码公开的数据应通过"方法","属性","索引器"提供.通过使用这些构造间接访问内部字段,可以针对

    无效的输入值提供防护.存储由公共属性公开的数据的私有字段称为"后备存储"或"支持字段".

    字段通常存储这样的数据:该数据必须可供多个类方法访问,并且其存储期必须长于任何单个方法的生存期.例如,表示日历日期的类可能有3个整数字段:一个表示月份,一个表

    示日期,一个表示年份.如果一个变量只在某个方法范围内使用 那么 应该在方法体自身范围内声明为局部变量。

    在类块中通过指定字段的访问级别,然后指定字段的类型,在指定字段的名称来声明这些字段.例如:

    public class CalendarEntry

    {

      //私有字段

      private DateTime date;

      //公共字段(一般不推荐)

      public string day;

      //公共属性为date字段提供安全性

      public DateTime Date

      {

        get{return date;}

        set

        {

          //设置可能出生日期的合理边界

          if(value.Year>1900&&value.Year<=DateTime.Today.Year)  

          {

            date=value;

          }

          else

            throw new ArgumentOutOfRangeException();  

        }

      }

      //公共方法为date字段提供安全性

      //例如:birthday.SetDate("1975,6,30");  

      public void SetDate(string dateString)

      {

        DateTime dt=Convert.ToDateTime(dateString);

        //设置出生日期的合理边界

        if(dt.Year>1900&&dt.Year<=DateTime.Today.Year)

        {

          date=dt;

        }

        else

          throw new ArgumentOutOfRangeException();

      }

      public TimeSpan GetTimeSpan(string dateString)

      {

        DateTime dt=Convert.ToDateTime(dateString);

        if(dt!=null&&dt.Ticks<date.Ticks)

        {

          return date-dt;

        }

        else

          throw new ArgumentOutOfRangeException();    

      }

    }

     若要访问对象中的字段,请在对象名称后面添加一个句点,然后添加该字段的名称,比如objectname.fieldname.例如:

     CalendarEntry birthday=new CalendarEntry();

     bitrhday.day="Saturday";

     声明字段时可以使用赋值运算符为字段指定一个初始值。例如,若要自动将"Monday赋给"day字段,需要声明day,如下例所示:

     public class CalendarDateWithInitialization

     {

      public string day="Monday";

    }

    字段的初始化紧靠调用对象实例的构造函数之前.如果构造函数为字段赋值,则该值将覆盖字段声明期间给出的任何值

    说明:字段初始值设定项不能引用其他实例字段.

    属性

    属性是面向对象编程的基本概念,提供了对私有字段的访问封装,在C#中以get和set访问器方法实现对可读可写属性的操作,

    提供了安全和灵活的数据访问封装.(这里与上面字段介绍 相呼应)

    属性是这样的成员:它提供灵活的机制来读取,编写或计算某个私有字段的值.可以像使用公共数据成员一样使用属性,但实际上它们是称作"访问器"的特殊方法.这使得可以轻松访问数据,此外还有助于提高方法

    的安全性和灵活性.

    示例1:

    public class MyProperty

    {

      //定义字段

      private string name;

      private int age;

      //定义属性,实现对 name字段的封装

      public string Name

      {

        set{name=value;}

        get

        {

          if(name==null)

            return string.Empty;

          else

            return name;            

        }

      }

      //定义属性,实现对age字段的封装

      //加入对字段的范围控制

      public int Age

      {

        get{return age;}

        set

        {

          if(value>0)&&(value<150)

          {

            age=value;    

          }

          else

          {

            throw new Exception("Not a real age");

          }

        }

      }

    }

    public class MyTest

    {

      public static void Main(string[] args)

      {

        MyProperty myProperty=new MyProperty();

        //触发set访问器

        myProperty.Name="Anytao"

        //触发get访问器

        Console.WriteLine(myProperty.Name);

      }

    }

    示例2:

    在本示例中,TimePeriod类存储了一个时间段.在内部,类以秒为单位存储时间,但客户端使用名为Hours的属性能够以小时为单位指定时间.Hours属性的访问器执行小时和秒之间的转换.

    class TimePeriod

    {

      private double seconds;

      public double Hours

      {

        get{return second/3600;}

        set{second=value*3600}

      }

    }

    class Program

    {

      static void Main()

      {

        TimePeriod t=new TimePeriod();

        //设置Hours属性自动调用set方法

        t.Hours=24;

        //得到Hours属性,自动调用get方法

        System.Console.WriteLine("Time in Hours:"+t.Hours);

      }

    }

    属性概述

    属性使类能够以一种公开的方法获取和设置值,同时隐藏实现或验证代码.

    get属性访问器用于返回属性值,而set访问器用于分配新值.这些访问器可以有不同的访问级别.有关更多信息,请参见 "限制访问器可访问性(C#编程指南)".

    value关键字用于定义由set取值函数分配的值.

    不实现set取值函数的属性是只读的.

    对于不需要任何自定义访问器代码的简单属性,可考虑选择使用自动实现的属性.有关更多信息,请参见"自动实现的属性(C#编程指南)"

    以上是个人整理的 有关 字段,变量,属性的详细解释.示例代码,只做参考,并未测试功能。。。。Lurrykong(2013.6.28)

  • 相关阅读:
    和菜鸟一起学产品之产品经理的自我管理能力
    和菜鸟一起学产品之产品经理的工作职责
    遗传算法解决TSP问题实现以及与最小生成树的对比
    双系统或三系统:Grub Rescue修复方法
    err:安装程序试图挂载映像 1(缺少ISO 9660图像)
    OpenCV手写数字字符识别(基于k近邻算法)
    最小生成树
    ubuntu12.04:Tomcat 7服务器:手动安装
    ubuntu12.04:jdk7:手动安装
    ubuntu12.04:Mysql数据库:手动安装
  • 原文地址:https://www.cnblogs.com/LurrykongNet-jingxin/p/3161172.html
Copyright © 2011-2022 走看看