C#.NET中的字段与属性_1

一个类中需要有描述这个类信息的数据,而存储这些数据的变量就成为字段。

字段默认的访问级别为private(只有本类可以直接访问),我们将其访问级别改为public,在其他类中就可以访问了。

字段和属性表示对象包含的信息,字段类似于变量,因为可以直接读取或设置他们。

属性是对字段的封装。属性可以对字段的访问进行控制,可以进行非法设置值的判断。属性并不存储数据,字段存储数据。

封装后,有一些字段我只能赋值,不能读取,有些只能读取,不能赋值,而且可以对传过来的值进行选择。

建议所有的字段不要写成public级别,为字段设置属性,符合面向对象封装的原则。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 属性
{
    class Program
    {
        static void Main(string[] args)
        {

        }
    }
    class Person
    {
        //string _name;            //字段 姓名  字段的默认访问级别为 private(只能在本类中调用)
        //public string Name       //属性  对字段_name进行封装
        //{
        //    get
        //    {
        //        return _name;
        //    }
        //    set
        //    {
        //        _name = value;
        //    }
        //}

        public string Name    //这是自动实现的属性 方便快捷生成属性 相当于以上注释的代码
        {
            get;              //当写自动实现的属性时,get和set两个都不能省
            set;
        }

        private int _age;       //字段 年龄
        public int Age          //属性
        {
            get { return _age; }
            set
            {
                if (value < 0)         //年龄是大于0的
                {
                    _age = 18;        //如果用户使用非法值,将年龄默认设置为18岁
                }
                else
                {
                    _age = value;
                }
            }
        } 
        public char Gender;         //字段 性别  访问级别为public 在其他类中可以直接访问

        private DateTime birthdate;
        //字段 生日 该字段的访问级别为private,我要想在其他类中使用该字段,只好使用方法

        public DateTime GetBirthdate()   //这里的方法相当于属性中的get
        {
            return birthdate;
        }

        public void SetBirthdate(DateTime value)   //这里的方法相当于属性中的set
        {
            birthdate = value;
        }

        //所谓属性就是绑定了字段的两个方法
        //当我们在属性中不写 get访问体时,该字段就是只写,不写set访问体时,该字段就是只读。
    }
}

惯用法:属性开头字母大写,字段开头字母小写。

选中字段  不论是public int age; 或者是private int age; 都可以。选中后按快捷键  ctrl+r,e 弹出封装字段窗口,改改属性名称即可。

或是选中字段后,鼠标右键选择重构,选择封装字段,改改属性名称即可。

.net3.0之后就有了属性的简写方式

public string Name { get; set; }

//编译器自动帮我们生成私有字段和set get代码段

//自动实现的属性,get和set都不能省略

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

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

输入prop  +  再两下tab键    会出现属性的格式,改改返回值,属性名称就可以了。

按下两下Tab键之后

只需要改改返回值,属性名称就好了。

public string Name { get; set; }     //等同于下面的代码

private string name;

public string Name

{

set{ this.name = value;}

get{ return this.name;}

}

自动实现的属性,自动实现了属性的访问器,快速生成属性。

当属性只需要单纯的读写访问时使用。另外,有些特别属性也可以快速实现:

只读属性:publicstring Str{ get; private set;}

只写属性:publicstring Str{ private get; set;}

当属性是派生属性或者要做访问控制或需要控制非法值的时候,就不能如此使用了。这个时候需要自己实现访问器:

private int _salary;
public int Salary
{
     get
    {
        //工资不可以随便给别人看,得有权限
        if(Authorization.Check(visitor))
            return _salary;
        throw new NotAuthorizeException();
    }
    set
    {
        //工资是大于零的
        if(value > 0)
        {
            _salary = value;
        }
        else
        {
           //提示错误
        }
    }
}

C#.NET中的字段与属性_1,布布扣,bubuko.com

时间: 2024-10-08 08:33:48

C#.NET中的字段与属性_1的相关文章

C#.NET中的字段与属性_2 为什么要用属性

属性的好处,就是对存入公共变量的值可以进行处理,如果觉得该值不合法,可以就地变换或者直接提出警告,只不过多花了点点时间,所以有一点点慢.但对于该类所生成的对象的使用安全,还是有相当多的好处的,至少运行时,因公共变量值的错误而产生的问题会大大减少. 用公共变量速度快,就是因为少了中间处理的环节,但是也因此更直接地对类的内容进行了操作和控制,比起属性的使用来说,相对的安全性就变低了. 应该说属性与公共变量各有各的用途,否则公共量变就会被取消掉. 公共变量的好处,就是快.但由于这种用法必须开放变量访问

在netcore中实现字段和属性注入

简单来说,使用Ioc模式需要两个步骤,第一是把服务注册到容器中,第二是从容器中获取服务,我们一个一个讨论并演化.这里不会考虑使用如Autofac等第三方的容器来代替默认容器,只是提供一些简单实用的小方法用于简化应用层的开发. 将服务注入到容器 asp.netcore官方给出的在容器中注册服务方法是,要在Startup类的ConfigureServices方法中添加服务,如下所示: public void ConfigureServices(IServiceCollection services)

Java中的字段和属性

Java中的属性,通常可以理解为get和set方法.而字段,通常叫做“类成员”. 属性只局限于类中方法的声明,并不与类中其他成员相关.例如:void setA(String s){}String getA(){} 当一个类中拥有这样一对方法时,我们可以说,这个类中拥有一个可读写的a属性(注意是小写a).同时包含get访问器和set访问器的属性称为读写属性(read-write property).只具有get访问器的属性称为只读属性(read-only property).只具有set访问器的属

C#反射类中所有字段,属性,方法(转)

可能大家都知道在C#中如何创建一个类,但对于类的结构可能大家不一定了解的很清楚,对于我来说,我之前也搞的不是很明白,今天,当我没事研究反射的时候突然发现了着一点. 我们来看类的结构到底是什么 public class People //类名 { private static string name; //字段 private string sex;//字段 public string Sex //属性 { get { return sex; } set { sex = value; } } pu

Python类中的字段,方法,属性区别及StaticMethod, Property

类包含下列 静态属性 动态属性 静态方法 动态方法 class Province: #静态字段--属于类,调用方法类.字段名 memo = "中国23个省之一" #动态字段--属于对象,调用方式实例化对象.字段名 def __init__(self, name, capital, leader): self.Name = name self.Capital = capital self.Leader = leader #动态方法--属于对象 def sports_game(self):

C#语言中字段和属性相关知识剖析

针对C#中的字段和属性,很多初学者无法区分这两者之间的区别. 字段与属性比较 字段;是一种"成员变量",一般在类的内部做数据交互使用,占用内存空间. 属性:a.是一种逻辑变量,一般跟字段一起结合起来使用,是字段的扩展,并不占用实际的内存. b.属性其实就是外界访问私有字段的入口,属性本身不保存任何数据.在面向对象设计中主要使用属性描述对象的静态特征. c.属性设置过程中一般会用到get和set两个方法.可以在方法里加入逻辑处理数据,灵活拓展使用. 标注:因为属性不占用实际内存,所以属性

c#中的变量,属性,字段

c++中只有成员变量和函数这个概念,然而c#中增加了很多术语:字段,属性,变量,方法,消息,委托... 先看看"变量"这个词:这个术语的意思应该就是c++中"变量"的一个更小的子集.限定于函数或者全局的定义,比如int a;用来表示一块内存区域. 字段:应该是特指类中的变量.比如在类中定义一个a,int a; 很奇怪,这就叫字段了. 属性:特指类,接口中对字段操作的一个封装.和字段的差别就是,没有没get,set了. 方法:就是函数了. 消息:这个是c++没有的东西

不允许修改SQLserver2008r2表中字段的属性问题

SQLserver2008r2修改表中字段的属性时弹出 点击工具->选项,取消阻止保存要求重新创建表的更改

逆向删除属性表中的字段

删除属性表中的字段一定要注意循环的方式.如果是for循环,i< FeatureClass.Fields.FieldCount话,每删除一个字段FieldCount属性返回的字段数量将减少一个,也就是你根本不能完全删除想要删除的字段:如果你先把FeatureClass.Fields.FieldCount赋给一个变量count,for循环中使用i<count,最后导致索引越界:所以,建议使用逆向的方法删除字段. IFeatureClass pointFS = GPClass.gpUtilities