字段,属性,方法

 

 

对象初始化过程

如果没有继承,顺序如下:

  • 静态变量
  • 静态构造函数
  • 非静态变量
  • 非静态构造函数

 

如果类有基类,那么基类和子类的初始化顺序如下:

  • 继承类静态成员变量初始化
  • 继承类静态构造函数调用
  • 继承类实例变量初始化
  • 基类静态静态成员变量初始化
  • 基类静态构造函数调用
  • 基类实例变量初始化
  • 基类构造方法调用
  • 继承类构造方法调用

 

静态变量和静态属性

类的静态变量和静态属性都是输入真个类的,而不是属于哪个类的实例的。都可以直接用ClassName.field和ClassProperty来访问。

但是类的静态变量和静态属性有什么差别呢?有些地方还是要注意下的。比如,类A有一个public的field(虽然field很少是public的),一个public的属性。每次我们访问A.field得到的都是同一个值吗?每次我们访问A.Property都是同一个值吗?

下面有个例子,大家可以

public class SimpleClass
    {
        public static int staticField = new Random().Next();

        public static int StatidProperty
        {
            get { return new Random().Next(); }
        }

        public static int StaticProperty2
        {
            get { return staticField; }
        }

    }

 

 

public class MyClass
    {
        public void Test()
        {
            int i1 = SimpleClass.StatidProperty;
            Thread.Sleep(2000);
            int i2 = SimpleClass.StatidProperty;

            Console.WriteLine(i1);
            Console.WriteLine(i2);

            Console.WriteLine("--------------");

            int i3 = SimpleClass.staticField;
            Thread.Sleep(2000);
            int i4 = SimpleClass.staticField;

            Console.WriteLine(i3);
            Console.WriteLine(i4);

            Console.WriteLine("-----------");

            int i5 = SimpleClass.StaticProperty2;
            Thread.Sleep(2000);
            int i6 = SimpleClass.StaticProperty2;

            Console.WriteLine(i5);
            Console.WriteLine(i6);
        }
    }

以下是运行结果

------ Test started: Assembly: Castle.DynamicProxy.Demo.dll ------

160653910
1987364442
--------------
160653910
160653910
-----------
160653910
160653910

1 passed, 0 failed, 0 skipped, took 6.15 seconds (Ad hoc).

 

其实很好理解,C#里的属性虽然和字段很类似,但属性的本质是方法。字段在申明时时必须初始化的,如果没有初始化,会给它一个默认值(即default(T),T是字段的类型)。也就是说,静态字段在申明时即确定了。所以上面实例中2次调用静态字段得到的都是同一个值。但是静态属性,我们可以理解为是一个静态方法。2次调用,返回的值是不一样的。

c#中的对象的更多相关文章

  1. [转]ThinkPHP中实例化对象M()和D()的区别,select和find的区别

    1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会 ...

  2. js中判断对象具体类型

    大家可能知道js中判断对象类型可以用typeof来判断.看下面的情况 <script> alert(typeof 1);//number alert(typeof "2" ...

  3. 浅解析js中的对象

    浅解析js中的对象 原文网址:http://www.cnblogs.com/foodoir/p/5971686.html,转载请注明出处. 前面的话: 说到对象,我首先想到的是每到过年过节见长辈的时候 ...

  4. js中XMLHttpRequest对象实现GET、POST异步传输

    js中XMLHttpRequest对象实现GET.POST异步传输 /* * 统一XHR接口 */ function createXHR() { // IE7+,Firefox, Opera, Chr ...

  5. 浅谈Java中的对象和引用

    浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...

  6. Hibernate中Java对象的三种状态

                                                                                     Hibernate中Java对象的三种 ...

  7. 批量导出oracle中的对象

    背景 Oracle数据库中有table,view,procedure,function,package,type等对象,需要将这些对象导出到不同的文件中.常用的方法有3种:1. 通过开发工具直接导出. ...

  8. 缓存依赖中cachedependency对象

    缓存依赖主要提供以下功能:1.SQL 缓存依赖项可用于应用程序缓存和页输出缓存.2.可在 SQL Server 7.0 及更高版本中使用 SQL 缓存依赖项.3.可以在网络园(一台服务器上存在多个处理 ...

  9. JVM中,对象在内存中的布局

    在hotSpot虚拟机中,对象在内存中的布局可以分成对象头.实例数据.对齐填充三部分. 对象头:主要包括: 1.对象自身的运行行元数据,比如哈希码.GC分代年龄.锁状态标志等,这部分长度在32位虚拟机 ...

  10. javascript中的对象,原型,原型链和面向对象

    一.javascript中的属性.方法 1.首先,关于javascript中的函数/“方法”,说明两点: 1)如果访问的对象属性是一个函数,有些开发者容易认为该函数属于这个对象,因此把“属性访问”叫做 ...

随机推荐

  1. Putty是一个专业的SSH连接客户端

    http://www.putty.ws/PuTTY-LinuxVPS Putty是一个专业的SSH连接客户端,当然可以用来连接Linux操作系统的VPS.下文是Putty连接工具的使用方法与详细教程, ...

  2. 第3章 抽象工厂模式(Abstract Factory)

    原文 第3章 抽象工厂模式(Abstract Factory) 场景我们的系统要同时支持两个数据库  SqlServer 跟Oracle数据库  并且不同的环境要进行随时切换. 看下面的代码: 1 2 ...

  3. crawler_UE使用技巧

    UE使用技巧 Tip 1: 如何去掉所编辑文本中包含特定字符串的行? 这则技巧是在UltraEdit的帮助文件里提到.CTRL+R 调出来替换(Replace)窗口,选中"使用正则表达式&q ...

  4. ASP.NET 5 Web 项目

    在Mac OS X Yosemite 10.10.3 中搭建第一个 ASP.NET 5 Web 项目 终于有时间在 Mac 上安装一下 ASP.NET 5,网上有许多教程,但是多数的时间比较早了,版本 ...

  5. monkey命令详解

    标准的monkey 命令 adb shell monkey [options] <eventcount> 例如: adb shell monkey -v    产生500次随机事件,作用在 ...

  6. ENode 2.0

    ENode 2.0 - 介绍一下关于ENode中对Command的调度设计 摘要: CQRS架构,C端的职责是处理从上层发送过来的command.对于单台机器来说,我们如何尽快的处理command呢? ...

  7. Content-Type boundary 问题

    我并不知道问题怎么描述清楚一些. 事情是这样的,使用  Microsoft Dynamics CRM Server 2016 做CRM系统的时候用到 使用 Web API 执行批处理操作(参见SDK或 ...

  8. IOS程序创建view

    在IOS程序中创建view有六种方式 首先创建一个GLViewController类,继承UIViewController. 然后进入GLAppDelegate.m,在- (BOOL)applicat ...

  9. 如何判断微信内置浏览器(通过User Agent实现)

    在进行微信公众账号开发的时候,其中很大一块是微站点的开发,我们需要知道当前的浏览器是微信内置的浏览器,那么如何判断呢? 微信内置浏览器的 User Agent 如何判断微信内置浏览器,首先需要获取微信 ...

  10. 请确保在编译时已将“AjaxControlToolkit.Properties.Resources.NET4.resources”正确嵌入或链接到程序集“AjaxControlToolkit”

    原文:请确保在编译时已将"AjaxControlToolkit.Properties.Resources.NET4.resources"正确嵌入或链接到程序集"AjaxC ...