值类型与引用类型(特殊的string) Typeof和GetType() 静态和非静态使用 参数传递 相关知识
学习大神博客链接: http://www.cnblogs.com/zhili/category/421637.html
一 值类型与引用类型
需要注意的string 是特殊类型的引用类型.
使用方法: == 比较的是栈里面的值, 值类型比较值, 对象(除字符串)比较的是栈里面的地址.
equal比较的是实际的值,是object里面的虚方法重写,重写时最好重写getHashCode()方法.
如下为代码例子
static void Main(string[] args)
{
object m1 =1 ;
object m2 = 1;
Console.WriteLine(m1==m2); // False;因为比较的是引用,肯定不是同一个对象.
Console.WriteLine(m1.Equals(m2)); //True. 因为比较的是对象对应的值.
Console.Read();
}
例子2:
static void Main(string[] args)
{
string str1 = "ZhangSan";
string str2 = "ZhangSan";
string str3 = new string(new char[] { 'z', 'h' });
string str4 = new string(new char[] { 'z', 'h'});
Console.WriteLine("str1 == str2 " + (str1 == str2).ToString()); //True
Console.WriteLine("str1 Equals str2 " + str1.Equals(str2));//True Console.WriteLine("str3 == str4 " + (str3 == str4).ToString());//True
Console.WriteLine("str3 Equals str4 " + str3.Equals(str4)); //True. Console.Read();
} //总结: 因为string重写了==方法.用于比较值.
二 Typeof 和 GetType() 区别
- typeof 是运算符,而 GetType() 是方法
- typeof 获得类型的System.Type对象,GetType()获得当前实例的Type,
- GetType()是基类System.Object的方法,只有建立了一个实例之后才能够被调用
- typeof的参数只能是int, string, class,自定义类型,不能为具体实例,否则编译器会报错
static void Main(string[] args)
{
object m1 = 1;
object m2 = 1;
// ValueType是引用类型,因为它是类,所以返回为false
Console.WriteLine(typeof(ValueType).IsValueType); //False. ValueType是类!!!
Console.WriteLine(m1.GetType().IsValueType);//Ture
Console.Read();
}
三 静态与非静态.
说的比较透彻的是, 链接: ([C#基础知识系列]全面解析C#中静态与非静态)http://www.cnblogs.com/zhili/archive/2013/06/16/StaticAndNonStatic.html
个人使用总结: 想不实力化类-->创建静态类-->静态属性-->静态成员是private的-->使用静态方法一般用于作为通用的工具类来实现.
文中总结有: 1, 静态方法不能被标识为virtual、abstract或override,静态方法可以被派生访问,但是不能被派生类重写.
2, 构造函数执行过程:
静态成员分配内存空间-->静态成员初始化-->执行静态构造函数-->执行实例成员初始化-->执行实例构造函数
IL 中.ctor代表实例构造器.
四 参数传递
对于按值传递,不管是值类型还是引用类型的按值传递,都是传递实参的一个拷贝.
只是值类型时,此时传递的是实参实例的一个拷贝(也就是值类型值的一个拷贝)
而引用类型时,此时传递的实参引用的副本。
对于按引用传递,传递的都是参数地址,也就是实例的指针.(加ref and out 关键字)
注意: string 是特殊的引用类型. 传递是实际的值,想要方法传递引用, 即外面的值发生改变, 需要加ref out 参数.
值类型与引用类型(特殊的string) Typeof和GetType() 静态和非静态使用 参数传递 相关知识的更多相关文章
- string 是值类型,还是引用类型(.net)[转]
转自http://hi.baidu.com/newfzks/item/b805f0f4edb0810dd89e7290 string 是值类型,还是引用类型(.net) 一. string 类型的用法 ...
- C#入门篇6-7:字符串操作 看看字符串的特殊之处 值类型与引用类型的区别
//看看字符串的特殊之处值类型与引用类型的区别 public static void CompareString(string stra, string strb, int i) { #region ...
- C#基础(四)--值类型和引用类型,栈和堆的含义
本文主要是讨论栈和堆的含义,也就是讨论C#的两种类据类型:值类型和引用类型: 虽然我们在.net中的框架类库中,大多是引用类型,但是我们程序员用得最多的还是值类型. 引用类型如:string,Obje ...
- String为值类型还是引用类型
关于String为值类型还是引用类型的讨论一直没有平息,最近一直在研究性能方面的问题,今天再次将此问题进行一次明确.希望能给大家带来点帮助. 如果有错误请指出. 来看下面例子: //值类型 int a ...
- C#中string类型是值类型还是引用类型?
.Net框架程序设计(修订版)中有这样一段描述:String类型直接继承自Object,这使得它成为一个引用类型,也就是说线程上的堆栈上不会驻留有任何字符串. string类型(引用类型) 名称 CT ...
- C#中string类型是值类型还是引用类型?(转)
出处:https://www.cnblogs.com/dxxzst/p/8488567.html .Net框架程序设计(修订版)中有这样一段描述:String类型直接继承自Object,这使得它成为一 ...
- 转:C# String为值类型还是引用类型
关于String为值类型还是引用类型的讨论一直没有平息,最近一直在研究性能方面的问题,今天再次将此问题进行一次明确.希望能给大家带来点帮助,如果有错误请指出. 来看下面例子: //值类型 int a ...
- 枚举|标志枚举+|(或)和&(与)运算|类型转换|值类型和引用类型|传参|异常|垃圾回收
枚举部分 enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型. 通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方便地访问它. 但是,还可以 ...
- JavaScript中值类型与引用类型
JavaScript中的变量类型有哪些? 值类型:字符串(string).数值(number).布尔值(boolean).null.undefined 引用类型:对象(Object).数组(Array ...
随机推荐
- flex 简单跑马灯效果(竖着显示)
<mx:Move id="move_area" target="{VBox_AreaWarning}"/> //move效果,模拟跑马灯 <s ...
- java foreach编辑讲解
foreach语句使用总结 foreach语句是java5的新特征之一,在遍历数组.集合方面,foreach为开发人员提供了极大的方便. foreach语句是for语句的特殊简化版本,但是foreac ...
- Codeforces Round #333 (Div. 2) B. Approximating a Constant Range st 二分
B. Approximating a Constant Range Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com ...
- material-dialogs
https://github.com/afollestad/material-dialogs
- 安卓开发之探秘蓝牙隐藏API
上次讲解Android的蓝牙基本用法,这次讲得深入些,探讨下蓝牙方面的隐藏API.用过Android系统设置(Setting)的人都知道蓝牙搜索之后可以建立配对和解除配对,但是这两项功能的函数没有在S ...
- 开源 java CMS - FreeCMS2.3 Web页面信息採集
原文地址:http://javaz.cn/site/javaz/site_study/info/2015/23312.html 项目地址:http://www.freeteam.cn/ Web页面信息 ...
- ios开发——实用技术篇Swift篇&系统声音
系统声音 // MARK: - 系统声音 /*----- 系统声音 ------*/ @IBAction func systemSound() { //建立的SystemSoundID对象 var s ...
- 通过GitHub和Hexo搭建个人博客
LinEvan个人博客 最终有自己的个人博客,逼格一下子提高说不少. 网上一搜教程一大堆,非常多已经写得非常好了,我就不凑这个热闹了.推荐一篇博文:怎样搭建一个独立博客--简明Github Pages ...
- online ddl 跟踪
| >mysql_prepare_alter_table T@4 : | | | | | | <mysql_prepare_alter_table 7368 T@4 : | | | | | ...
- How to Display Image In Picturebox in VC++ from Iplimage and Mat
Introduction This tip/trick will be useful to OpenCV programmers, who wish to use Windows Form appli ...