c#中的对象
字段,属性,方法
对象初始化过程
如果没有继承,顺序如下:
- 静态变量
- 静态构造函数
- 非静态变量
- 非静态构造函数
如果类有基类,那么基类和子类的初始化顺序如下:
- 继承类静态成员变量初始化
- 继承类静态构造函数调用
- 继承类实例变量初始化
- 基类静态静态成员变量初始化
- 基类静态构造函数调用
- 基类实例变量初始化
- 基类构造方法调用
- 继承类构造方法调用
静态变量和静态属性
类的静态变量和静态属性都是输入真个类的,而不是属于哪个类的实例的。都可以直接用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#中的对象的更多相关文章
- [转]ThinkPHP中实例化对象M()和D()的区别,select和find的区别
1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会 ...
- js中判断对象具体类型
大家可能知道js中判断对象类型可以用typeof来判断.看下面的情况 <script> alert(typeof 1);//number alert(typeof "2" ...
- 浅解析js中的对象
浅解析js中的对象 原文网址:http://www.cnblogs.com/foodoir/p/5971686.html,转载请注明出处. 前面的话: 说到对象,我首先想到的是每到过年过节见长辈的时候 ...
- js中XMLHttpRequest对象实现GET、POST异步传输
js中XMLHttpRequest对象实现GET.POST异步传输 /* * 统一XHR接口 */ function createXHR() { // IE7+,Firefox, Opera, Chr ...
- 浅谈Java中的对象和引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...
- Hibernate中Java对象的三种状态
Hibernate中Java对象的三种 ...
- 批量导出oracle中的对象
背景 Oracle数据库中有table,view,procedure,function,package,type等对象,需要将这些对象导出到不同的文件中.常用的方法有3种:1. 通过开发工具直接导出. ...
- 缓存依赖中cachedependency对象
缓存依赖主要提供以下功能:1.SQL 缓存依赖项可用于应用程序缓存和页输出缓存.2.可在 SQL Server 7.0 及更高版本中使用 SQL 缓存依赖项.3.可以在网络园(一台服务器上存在多个处理 ...
- JVM中,对象在内存中的布局
在hotSpot虚拟机中,对象在内存中的布局可以分成对象头.实例数据.对齐填充三部分. 对象头:主要包括: 1.对象自身的运行行元数据,比如哈希码.GC分代年龄.锁状态标志等,这部分长度在32位虚拟机 ...
- javascript中的对象,原型,原型链和面向对象
一.javascript中的属性.方法 1.首先,关于javascript中的函数/“方法”,说明两点: 1)如果访问的对象属性是一个函数,有些开发者容易认为该函数属于这个对象,因此把“属性访问”叫做 ...
随机推荐
- php 开发技巧
以下九种PHP一个非常有用的功能.我不知道你还没有使用?1. 的功能,你可能知道的参数,任意数量PHP我同意你定义一个函数默认参数. 但你可能并不知道PHP还同意你定义一个全然随意的參数的函数以下是一 ...
- JS的parent对象
top: 该变更永远指分割窗口最高层次的浏览器窗口.如果计划从分割窗口的最高层次开始执行命令,就可以用top变量. parent: 该变量指的是包含当前分割窗口的父窗口.如果在一个窗口内有分割窗口,而 ...
- ReactJS-render
ReactJS分析之入口函数render ReactJS分析之入口函数render 前言 在使用React进行构建应用时,我们总会有一个步骤将组建或者虚拟DOM元素渲染到真实的DOM上,将任务交给 ...
- AJAX及其跨域的主要解决方法
AJAX = Asynchronous JavaScript andXML(异步的 JavaScript 和 XML).通过在后台与服务器进行少量数据交换,使网页实现异步更新.要明白异步交互可以通过同 ...
- css优先级计算规则
原文:css优先级计算规则 最近面试了一些求职者,我问css优先级计算规则是怎样的?答曰ID优先级>class>元素选择器,外联样式优先级低于内联样式,内联样式优先级低于行间样式,然后就没 ...
- C++中public,protected,private访问
对于公有继承方式: (1)父类的public成员成为子类的public成员,允许类以外的代码访问这些成员:(2)父类的private成员仍旧是父类的private成员,子类成员不可以访问这些成员:(3 ...
- Android在真机调试的设置方法
1. 设置android手机为USB调试模式.步骤: menu---> 设置 ---> 应用程序 ---> 开发 , 选择[USB调试] 2. 用USB连接手机和电脑,并确保成功.步 ...
- final、finally、finalize差异
final.finally.finalize差异 1.final修饰符 它代表了一类是完美的类,它不能被继承,因此.一个类不能既被标记为final类别.同一时间被标记为abstract. 将变量或者函 ...
- android 控制手机的体积的大小 切换音效模式
(1)项目介绍 于android API的AudioManager于,它提供了一种方法来调整电话音量. audioMa.adjustVolume(AudioManager.ADJUST_LOWER, ...
- 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航
原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...