字段,属性,方法

 

 

对象初始化过程

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

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

 

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

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

 

静态变量和静态属性

类的静态变量和静态属性都是输入真个类的,而不是属于哪个类的实例的。都可以直接用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. Visual Studio 2010/2013 查看DLL接口(函数)

    1. “应用程序" Visual Studio 2010/2013 的Visual Studio Tools文件夹中打开Visual Studio Command Prompt 命令提示窗口 ...

  2. Eclipse UML小工具AmaterasUML的配置和使用

    AmaterasUML是个人认为最好用的Eclipse UML插件,能够通过拖拽Java源文件,轻松生成类图结构.同一时候支持活动图.时序图和用例图. 它的官方下载地址是:http://sourcef ...

  3. OJ提交题目中的语言选项里G++与C++的区别(转载)

    原文链接:http://blog.polossk.com/201405/c-plus-plus-g-plus-plus G++? 首先更正一个概念,C++是一门计算机编程语言,G++不是语言,是一款编 ...

  4. Android自己定义组件系列【8】——面膜文字动画

    我们掩盖文字动画Flash中非经货共同体共同,由于Android应用程序开发人员做你想要做这个动画在应用程序中去?本文中,我们看的是如何自己的定义ImageView来实现让一张文字图片实现文字的遮罩闪 ...

  5. 利用缓存、Timer间隔时间发送微信的实例,很有用的例子

    //Class WechatOfferExcutor 此类为微信触发类,属于上层调用类,其中有用到用静态变量缓存offer信息,Task异步执行发送方法等 using Newtonsoft.Json. ...

  6. S2SH新手框架建立具体过程

    S2SH集成框架新手学习总结 第一章:S2SH框架新手搭建准备工作仅仅都须要导入那些文件 第二篇:S2SH框架新手搭建具体过程 版本号信息:Struts2.3+Hibernate4.3.6+Sprin ...

  7. 程序员的Scala

    C#程序员的Scala之路第九章(Scala的层级) 摘要: 1.Scala的类层级Scala里类的顶端是Any所有的类都继承Any类,Any包括以下几个通用方法:final def ==(that: ...

  8. jQuery性能优化38建议---最引人注目的用户体验!

    一.需要注意的是的定义jQuery当变量被添加varkeyword 然而,这并不jQuery.整个javascript开发过程,所有需要注意,一定不要将其定义为下面的示例: $loading = $( ...

  9. android 反编译(dex 和 odex),非脑残转帖,绝对可靠

    Android 反编译 反编译odex文件(比如framework.odex),若是反编译dex,直接第4步 1.因为反编译odex的工具在D:\Develop tools\android反编译工具\ ...

  10. 如此高效通用的分页存储过程是带有sql注入漏洞的

    原文:如此高效通用的分页存储过程是带有sql注入漏洞的 在google中搜索“分页存储过程”会出来好多结果,是大家常用的分页存储过程,今天我却要说它是有漏洞的,而且漏洞无法通过修改存储过程进行补救,如 ...