字段,属性,方法

 

 

对象初始化过程

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

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

 

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

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

 

静态变量和静态属性

类的静态变量和静态属性都是输入真个类的,而不是属于哪个类的实例的。都可以直接用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. php 开发技巧

    以下九种PHP一个非常有用的功能.我不知道你还没有使用?1. 的功能,你可能知道的参数,任意数量PHP我同意你定义一个函数默认参数. 但你可能并不知道PHP还同意你定义一个全然随意的參数的函数以下是一 ...

  2. JS的parent对象

    top: 该变更永远指分割窗口最高层次的浏览器窗口.如果计划从分割窗口的最高层次开始执行命令,就可以用top变量. parent: 该变量指的是包含当前分割窗口的父窗口.如果在一个窗口内有分割窗口,而 ...

  3. ReactJS-render

    ReactJS分析之入口函数render ReactJS分析之入口函数render   前言 在使用React进行构建应用时,我们总会有一个步骤将组建或者虚拟DOM元素渲染到真实的DOM上,将任务交给 ...

  4. AJAX及其跨域的主要解决方法

    AJAX = Asynchronous JavaScript andXML(异步的 JavaScript 和 XML).通过在后台与服务器进行少量数据交换,使网页实现异步更新.要明白异步交互可以通过同 ...

  5. css优先级计算规则

    原文:css优先级计算规则 最近面试了一些求职者,我问css优先级计算规则是怎样的?答曰ID优先级>class>元素选择器,外联样式优先级低于内联样式,内联样式优先级低于行间样式,然后就没 ...

  6. C++中public,protected,private访问

    对于公有继承方式: (1)父类的public成员成为子类的public成员,允许类以外的代码访问这些成员:(2)父类的private成员仍旧是父类的private成员,子类成员不可以访问这些成员:(3 ...

  7. Android在真机调试的设置方法

    1. 设置android手机为USB调试模式.步骤: menu---> 设置 ---> 应用程序 ---> 开发 , 选择[USB调试] 2. 用USB连接手机和电脑,并确保成功.步 ...

  8. final、finally、finalize差异

    final.finally.finalize差异 1.final修饰符 它代表了一类是完美的类,它不能被继承,因此.一个类不能既被标记为final类别.同一时间被标记为abstract. 将变量或者函 ...

  9. android 控制手机的体积的大小 切换音效模式

    (1)项目介绍 于android API的AudioManager于,它提供了一种方法来调整电话音量. audioMa.adjustVolume(AudioManager.ADJUST_LOWER, ...

  10. 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航

    原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...