密封属性正规网赌平台

网上收集的这些,感觉还不错
函数等集合在一个个的单元中(我们称之为类)。被封装的对象通常被称为抽象数据类型。在本文中,我们将详细学习属性的特性。
封装的概念
可以把程序按某种规则分成很多“块“,块与块之间可能会有联系,每个块都有一个可变部分和一个稳定的部分。我们需要把可变的部分和稳定的部分分离出来,将稳定的部分暴露给其他块,而将可变的部分隐藏起来,以便于随时可以让它修改。这项工作就是封装.
例如:在用类实现某个逻辑的时候,类就是以上所说的块,实现功能的具体代码就是可变的部分,而public的方法或者属性则是稳定的部分。
封装的意义

封装的意义在于保护或者防止代码(数据)被我们无意中破坏。在面向对象程序设计中数据被看作是一个中心的原素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改。
封装提供了一个有效的途径来保护数据不被意外的破坏。相比我们将数据(用域来实现)在程序中定义为公用的(public)我们将它们(fields)定义为私有的(privat)在很多方面会更好。
私有的数据可以用两种方式来间接的控制。下面我们看一些c#例子来学习这两种方法用以封装数据。第一种方法,我们使用传统的存、取方法。第二种方法我们用属性(property)。无论我们使用哪种的方法,我们的目标是在使用数据的同时不能使它受到任何的破坏和改变。有如下好处

其一: 使用者只需要了解如何通过类的接口使用类,而不用关心类的内部数据结构和数据组织方法。
其二:高内聚,低耦合一直是我们所追求的,用好封装恰恰可以减少耦合
其三:只要对外接口不改变,可以任意修改内部实现,这个可以很好的应对变化
其四:类具有了简洁清晰的对外接口,降低了使用者的学习过程
用传统的读、写方法封装

让我们来看一个例子有一个类Department,为了操纵这个类中的数据(string departname)我们定义了一个读方法和一个写方法。
using system;
public class Department
{
private string departname;
.......
// 读方法
public string GetDepartname()
{
return departname;
}
//写方法
public void SetDepartname( string a)
{
departname=a;
}
}
通过上面的方法,我们可以保护私有数据不被外部程序所破坏。

常用的是使用这个!!!!
c#使用属性封装 
1、使用属性封装方法
2、AccessModifer Type PropertyName
{get{...}set{...}
}
public int {get{ return this.X}set{this.x=rangeCheckX(value)}
}
2、属性对某个字段封装时,命名规则,首字母大写
private int employeeID;public int EmployeeID
{get{return this.EmployeeID;};set{this.EmployeeID=value}
}
3、接口中定义属性
interface IScreenPosition
{
int X{get;set;}
int Y{get;set;}
}


4、实例化同时赋值
static void DoWork()
        {
            Polygon square = new Polygon();
            Polygon triangle = new Polygon { NumSides = 3 };
            Polygon pentagon = new Polygon { SideLength = 15.5, NumSides = 5 };

            Console.WriteLine("Square: number of sides is {0}, length of each side is {1}", 
                square.NumSides, square.SideLength);
            Console.WriteLine("Triangle: number of sides is {0}, length of each side is {1}", 
                triangle.NumSides, triangle.SideLength);
            Console.WriteLine("Pentagon: number of sides is {0}, length of each side is {1}", 
                pentagon.NumSides, pentagon.SideLength);
        }



详细请看它::::
c#中的属性 

  
在C#中我们可以很自由的访问共有字段,但有时我们可能需要某字段只能读或者写,或在改变字段值得时候做一些其他事情,显然这些仅仅依靠字段是无法实现的,于是便有了属性。 
   1、基本用法
  
c#中的属性由属性作用域中定义的get作用域(访问方法)和set作用域(访问方法)构成。
class Test
{
private int number;

    //int表示该属性所封装的数据类型
    //数据类型必须与相应的字段(number)相同   
    public int Num
    {
        get{return number;}
        set{number=value;}
    }
}

  
当封装数据时,可能希望配置一个只读属性。为此,可以忽略set块。类似,如果想拥有一个只读属性,就忽略get块。 
   2、静态属性  
  
C#静态属性可以是读写属性,只读属性,只写属性中的任意一种。静态访问器适用于整个类,而不是类的实例。静态属性中的set,get访问器只能访问类的静态成员。静态属性可以通过类名访问,不能使用实例调用,这与静态方法相同。
//简单的储蓄账户类
class SavingAccount
{
//实例级别的数据
public double currBalance;

   //静态数据点 
   private static double currInterestRate = 0.04; 

   //静态属性
   public static double InterestRate
   {
     get{return currInterestRate;}
     set{currInterestRate=value;}
   }                    
 }

 
   3、自动属性
  
自动属性可以简化封装数据字段的过程,减轻了定义私有返回字段和相关c#属性成员的工作。在定义自动属性时,只指定访问修饰符、实际的数据类型、属性名称和空的get/set作用域。在编译时,编译器为类型自动生成了私有返回字段和适当的get/set实现逻辑。
class Enemy
{
//自动属性
public string Name{get;set;}
public int Life{get;set;}
public float Attack{get;set;}

 }

  
注意:与传统的属性不同的是,不允许构建只读或只写的自动属性,自动属性定义是必须同时支持读写功能。但是定义更严格的get或set是可以的
 
   4、关于自动属性和默认值
  
可以直接在代码中使用封装了数字或布尔数据的自动属性,因为隐藏的返回字段将设置一个可以直接使用的安全的默认值。但如果自动属性封装了另一个类变量,隐藏的私有引用类型的默认值将设为null。
   例如下面的类spawn,使用了两个自动属性
class Spawn
{
//隐藏的int字段默认值为0
public int numbers{get;set;}
//隐藏的Enemy返回字段为null
public Enemy MyEnemy{get;set;}
}
  
当直接调用MyEnemy时,将会在运行时得到空引用异常,因为没有为后台使用的Enemy成员变量设置新的对象。
  
由于私有的返回字段是在编译时创建的,所以不能直接使用new关键字直接分配引用类型,必须在类的构造函数内部执行,以确保对象以安全方式诞生。
正规网赌平台,class Spawn
{
//隐藏的int字段默认值为0
public int numbers{get;set;}
//隐藏的Enemy返回字段为null
public Enemy MyEnemy{get;set;}

      //必须用构造函数重写分配给隐藏返回字段的默认值 
      public Spawn()
      {
         MyEnemy = new Enemy();
         numbers = 1;
      }

      public Spawn(Enemy enemy, int num)
      {
         MyEnemy = enemy;
         numbers = num;
      }
 }

相关文章