c# 为什么要封装字段
2014-02-11 11:54:00 weixin_33904756 阅读数 13
封装主要是为了提高代码的重用性,并方便以后的维护升级,而且封装还可以解决 数据存取的权限问题。
public class Count    //类的传统封装
{
   //变量的修饰符应为public
   public int x =0;
   public int y =0;
   public Count()  //构造函数
   {}
   public int Add() //加法运算
   { return x+y; }
}




publci class Count2  //类的属性封装
{
   public int x =0;
   public int y =0;
   public int z =0;
   public Count2()  //构造函数
   {}
   public int Z  //定义属性Z
   {
      get { return x+y ; }
      set { z=value; }
   }
   public int avg() //求平均值
   {
     return Z/2;
   }
}




static void Main(string[] args)
{
    Count ct =new Count();
     ct.x=5;
     ct.y=3;
    Console.WriteLine("两个是之和"+ct.Add(0.ToString());
    Count2 ct2=new Count2();
    ct2.x=6;
    ct2.y=2;
    Console.WriteLine("两个数之和"+ct2.Z.ToString());
    Console.WriteLine("两个数平均值"+ct2.avg().ToString());
    Console.Read();
}



结果:

两个是之和:8

两个是之和:8

两个数平均值:4

转载于:https://my.oschina.net/Akizi/blog/198499

2012-08-21 11:14:44 lhyxiaolang 阅读数 1933

封装是OOP(面向对象编程)三大特征之一。

为什么需要封装?

首先看以下代码

Code:
  1. public class Student   
  2. {   
  3.               public int age;   
  4.               public string name;   
  5.                  
  6.               public void say()   
  7.              {   
  8.                     Console.WriteLine("大家好,我是{0},今年{1}岁",name,age.ToString());   
  9.              }   
  10. }  

试着编写测试类,实例化对象,调用其say方法

Code:
  1. Class Test   
  2. {   
  3.              static void Main()   
  4.              {   
  5.                     Student student = new Student();   
  6.   
  7.                     student.age = -20;   
  8.                     student.name = "hamber";   
  9.   
  10.                     student.say();   
  11.              }   
  12. }  

输出结果:我是hamber,今年-20岁。

以上的赋值是不符合实际生活的。

这就需要我们对类中的敏感字段进行有效约束,这就用到了C#中的属性.

Code:
  1. public class Student   
  2. {   
  3.                 private int age;   
  4.                 public int Age   
  5.                {   
  6.                    get{return age;}   
  7.                    set{age = value;}   
  8.                }   
  9.   
  10.               public string name;   
  11.   
  12.               public void say()   
  13.              {   
  14.                   Console.WriteLine("大家好,我是{0},今年{1}岁",name,Age.ToString());   
  15.             }   
  16. }  

在C#中,我们通常不会直接访问类中的字段,而是通过get和set访问器来访问,这种实现方式我们称为属性。

Code:
  1. private int age;   
  2. public int Age   
  3. {   
  4.              get{return age;}   
  5.              set{age = value;}   
  6. }  

get访问器用来返回相应的私有字段的值。用return来返回。

set访问器用来设定相应的私有字段的值,可以看做是一个隐含的输入参数。

如何使用属性:

(1)将类中的敏感字段私有化

(2)添加get、set访问器

(3)在其中书写逻辑判断

注意事项:

(1)定义属性时,类型必须与它所访问的字段类型一致。

(2)一般情况下,字段的名称是小写的,属性的名称与字段名称一样,只是首字母要大写。

                                                                     属性的类型

定义属性,我们可以给他设定值,也可以获取它的值。如果想保护属性关联的字段,则只允许读数据,或者只允许写数据,

那么应该如何设定呢?

属性除了可以约束数据访问外,还可以设定设置读写属性,来限定它的访问类型,我们可以设置该属性为只读属性,这种情况下,我们就只能读取字段的值而不能赋值,属性的访问分类为以下三种:

---只读属性,只包含get访问器

---只写属性,只包含set访问器

---读写属性,包含get和set访问器

get和set访问器的灵活运用,可以保障类中字段的安全。

2019-01-31 14:33:20 qq_33380252 阅读数 82

原文:https://blog.csdn.net/hamber_bao/article/details/6504621

封装是OOP(面向对象编程)三大特征之一。

为什么需要封装?

首先看以下代码

public class Student   
{   
       public int age;   
       public string name;   
                 
       public void say()   
       {   
             Console.WriteLine("大家好,我是{0},今年{1}岁",name,age.ToString());   
       }   
}  


试着编写测试类,实例化对象,调用其say方法

 

Class Test   
{   
             static void Main()   
             {   
                    Student student = new Student();   
  
                    student.age = -20;   
                    student.name = "hamber";   
  
                    student.say();   
             }   
} 

 
输出结果:

我是hamber,今年-20岁。

以上的赋值是不符合实际生活的。

这就需要我们对类中的敏感字段进行有效约束,这就用到了C#中的属性.

public class Student   
{   
                private int age;   
                public int Age   
               {   
                   get{return age;}   
                   set{age = value;}   
               }   
  
              public string name;   
  
              public void say()   
             {   
                  Console.WriteLine("大家好,我是{0},今年{1}岁",name,Age.ToString());   
            }   
}  


在C#中,我们通常不会直接访问类中的字段,而是通过get和set访问器来访问,这种实现方式我们称为属性。

private int age;   
public int Age   
{   
             get{return age;}   
             set{age = value;}   
}  


get访问器用来返回相应的私有字段的值。用return来返回。

set访问器用来设定相应的私有字段的值,可以看做是一个隐含的输入参数。

如何使用属性:

(1)将类中的敏感字段私有化

(2)添加get、set访问器

(3)在其中书写逻辑判断

注意事项:

(1)定义属性时,类型必须与它所访问的字段类型一致。

(2)一般情况下,字段的名称是小写的,属性的名称与字段名称一样,只是首字母要大写。

属性的类型

定义属性,我们可以给他设定值,也可以获取它的值。如果想保护属性关联的字段,则只允许读数据,或者只允许写数据,

那么应该如何设定呢?

属性除了可以约束数据访问外,还可以设定设置读写属性,来限定它的访问类型,我们可以设置该属性为只读属性,这种情况下,我们就只能读取字段的值而不能赋值,属性的访问分类为以下三种:

---只读属性,只包含get访问器

---只写属性,只包含set访问器

---读写属性,包含get和set访问器

get和set访问器的灵活运用,可以保障类中字段的安全。
 

使用封装还可以实现对属性的只读、只写:

1 public string Name { get; private set; }//只读
2 public string Name { private get; set; }//只写

这样写属性时,编译器会自动创建private string name。这种是会自动实现后备成员变量的自动实现属性。

如果是:

1 public string Name { get; set; }

这样的没有啥限定的属性,其实和公有字段没多大区别了。

2017-01-10 18:07:44 CarryBest 阅读数 677

封装:隐藏对象的信息,流出对外的接口

private int a;             //私有的字段,封装成共有的属性,共外界访问,属性名一般首字母大写,与字段名相近

public int A{

get{                                //读访问器

return a;

};

set{                                                  // 写访问器

a=value;

}


}



//可以复制的时候给个条件,不满足条件的语句不能赋值

set{     

if(){

a=value;

}                                             // 写访问器


}


2017-04-27 11:44:00 weixin_30548917 阅读数 1

 今日敲代码时,突然感觉对类的属性封装、字段有点犯迷糊了。。连基础的都不知道了,那敲的代码怎么能严谨高效的。果断拿起各种高级编程、大全啥的翻起来~~这不再把自己的理解写下来(定义都是直接抄书的),献给同样迷糊的小伙伴。

    先说下类的成员,它分为数据成员和函数成员。数据成员,简单点可以理解成类的数据,包含了字段、常量(const)、事件;函数成员,就是操作类中的数据,包含方法、属性、构造函数、终结器(析构函数)、运算符、索引器。(就提一下,方便后面说下去,要都解释就偏题了)字段就是类里定义的变量,而属性则是字段的拓展。所以在使用属性前要结合一个正常的字段声明,这个字段称为属性的后备字段(backing field):

private int numberOfCows; 
  public int NumberOfCows
  {
         get
         {
                return numberOfCows;
         }
         set
         {
               numberOfCows = value;
               BagOfFeed = numberOfCows * FeedMultiplier;
        }
 }

读取NumberOfCows字段时会运行get方法,返回私有字段numberOfCows。而设置NumberOfCows字段时,会调用set方法,看上去这个方法没有参数,其实value就是它的参数,其中包含为这个字段设置的值。其实这就是用属性来对字段进行封装(这就是封装啦)。

使用封装还可以实现对属性的只读、只写:

public string Name { get; private set; }//只读
public string Name { private get; set; }//只写

这样写属性时,编译器会自动创建private string name。这种是会自动实现后备成员变量的自动实现属性。

如果是:

 public string Name { get; set; }

这样的没有啥限定的属性,其实和公有字段没多大区别了。

但是从面向对象的角度来讲,公开的是方法,而不是字段哦。而且微软也推荐:所有的字段都设置为私有字段,如果要使用它们,则把它们封装成属性。对于这样简单的set或get,编译器会自动进行inline处理,没有函数进出栈的性能损失。所以还是建议不要用公有字段了,给字段穿件衣服吧~~

转载于:https://www.cnblogs.com/llljpf/p/6773429.html

没有更多推荐了,返回首页