C# 类的介绍,参数传递,各种符号说法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HappyProject
{
    public class Happy
    {

        public const string Slogan = "You are happy!";
        private DateTime when;
        private string why;
        public DateTime When { get; set; }
        public string Why { get; set; }

    }
    public class UnHappy
    {

        public const string Slogan = "You are unhappy!";
        private DateTime when;
        private string why;
        public DateTime When { get; set; }
        public string Why { get; set; }

    }

}

  写了两个类,没什么用呢。

类中的数据和函数称为类的成员。成员的可访问性可以是 公共的,保护的,内部的,私有的。

数据成员是包含类的数据,废话,字段(field),常量,我的那两个类都有了呢~事件我的类里面还没有。数据成员可以是static的,也可以是实例成员。

  • 事件是类的成员,在发生某些行为(如改变类的字段或属性,或者进行了某种形式的用户交互操作)时候,它可以让对象通知调用方。客户可以包含所谓“事件处理程序”的代码来响应该事件,以后再说,树上写的,不是我说的哦。

函数成员提供了操作类中数据的某些功能。包括方法、属性、构造函数和终结器(finalizer)、运算符以及索引器。函数成员可以是static的(静态方法),也可以是实例成员(default)。

  • Property is a method group which we can visit from client. How to visit? Object.Property. C#为都读写类中的属性提供了专用语法,所以不必使用那些名称中嵌有Get或者Set的方法。因为属性的这种语法不同于一般函数的语法,在客户端的代码中,虚拟的对象被当作实际的东西。
  • Constructor构造函数是在实例化对象时自动调用的 auto-invoke的特殊函数。他们必须与所属的类同名,这个知道,且不能有返回类型。构造函数用于初始化字段的值。
  • Finalizer is something like constructor. When CLR detects an object won‘t be used any more, it would invoke finalizer. Their name is the same with Class, but has a bolang line. 查了一下,叫tlide。附上这个。

  “-”叫【破折号】(中文的长),属于中文使用的,英文中叫“dash”;

  “-”,叫【连接号】(英文短的),属于英文专用的,叫“hyphen”

  ◆“_”是下划线,英文就是:underline
  + plus 加号;正号
  - minus 减号;负号
  ± plus or minus 正负号
  × is multiplied by 乘号
  ÷ is divided by 除号
  = is equal to 等于号
  ≠ is not equal to 不等于号
  ≡ is equivalent to 全等于号
  ≌ is equal to or approximately equal to 等于或约等于号
  ≈ is approximately equal to 约等于号
  < is less than 小于号
  > is more than 大于号
  ≮ is not less than 不小于号
  ≯ is not more than 不大于号
  ≤ is less than or equal to 小于或等于号
  ≥ is more than or equal to 大于或等于号
  % per cent 百分之...
  ‰ per mill 千分之...
  ∞ infinity 无限大号
  ∝ varies as 与...成比例
  √ (square) root 平方根
  ∵ since; because 因为
  ∴ hence 所以
  ∷ equals, as (proportion) 等于,成比例
  ∠ angle 角
  ⌒semicircle半圆
  ⊙ circle 圆
  ○ circumference 圆周
  π pi 圆周率
  △ triangle 三角形
  ⊥ perpendicular to 垂直于
  ∪ union of 并,合集
  ∩ intersection of 交,通集
  ∫ the integral of ...的积分
  ∑ (sigma) summation of 总和
  ° degree 度
  ′ minute 分
  ″ second 秒
  ℃ Celsius system 摄氏度
  { open brace, open curly 左花括号
  } close brace, close curly 右花括号
  ( openparenthesis, open paren 左圆括号
  ) close parenthesis, close paren 右圆括号
  () brakets/ parentheses 括号
  [ open bracket 左方括号
  ] close bracket 右方括号
  [] square brackets 方括号
  . period, dot 句号,点
  | vertical bar, vertical virgule 竖线
  &ampersand, and, reference, ref 和,引用
  * asterisk, multiply, star, pointer 星号,乘号,星,指针
  / slash, divide, oblique 斜线,斜杠,除号
  // slash-slash, comment 双斜线,注释符
  # pound 井号
  \backslash, sometimes
  escape 反斜线转义符,有时表示转义符或续行符
  ~tilde波浪符
  . full stop 句号
  , comma 逗号
  : colon 冒号
  ; semicolon 分号
  ? question mark 问号
  ! exclamation mark (英式英语) exclamation point (美式英语)
  ‘apostrophe撇号
  - hyphen 连字号
  -- dash 破折号
  ... dots/ ellipsis 省略号
  " single quotation marks 单引号
  "" double quotation marks 双引号
  ‖ parallel 双线号
  & ampersand = and
  ~swungdash 代字号
  § section; division 分节号
  → arrow 箭号;参见号

  • Operator override.
  • Index qi 索引器allowed the objects to be indexed with array or collection.

接下来,书上开始一个个讲了

方法声明,方法调用会了。

public double ToBeHappy(double cost){

  double left=cost;

  left-=EatingKFC();

  left-=BuyADress();

  left-=ReadingBooks();

  left-=DoSports();

  return left;

}

一个我面试别人可能会考到的呢~值传递还是引用传递参数。

duang !Core section:给方法传递参数

参数可以通过引用或者通过值传递给方法。

  • 在变量通过引用传递给方法的时候,被调用的方法得到的就是这个变量,所以在方法内部对变量进行的任何改变在方法退出后仍旧有效。
  • 而变量通过值传递传送给方法,被调用的方法的得到的是变量的一个相同副本,也就是说,在方法退出后,对变量进行的修改会lost。

对于复杂的数据类型,按引用传递的效率更高,因为在按值传递时,必须复制大量的数据。

在C#中,除非特别说明,所有的parameters都是通过value值传递的。But, 在理解引用类型的含义时,需要注意。引用类型都有啥?忘了again。就记得个类了。

补益一下,想起吴国太了。

此乃吾之佳婿也!
男婚女嫁,需当交换文定之物!
吾乃吴国之母,谁敢造次!
有老身在,汝等皆可放心!

CLR支持两种类型,图片是盗取的,http://www.cnblogs.com/siqing99/archive/2012/04/03/2430918.html

C#的所有值类型均隐式派生自System.ValueType。

C#的值类型:结构!!!!可空类型Nullable!!!!数值类型int double什么的!!!!值类型在堆栈上

C#的引用类型:Array 数组!!!!类!!!!接口!!!!委托!!!!字符串!!!!object!!!!在那个托管堆上,garbage collector

内存分配的几点,在上面的博客里看到的,不是复制,而是自己打字打的。

 值类型作为局部变量时,该实例将被创建在堆栈上stack;而如果值类型变量作为类型的成员变量时,它将作为类型实例数据的一部分,比如说上面Happy类里面的Why,同该类型的其他字段一样都保存在托管堆上。就是所谓的嵌套结构。

   引用类型变量数据保存在托管堆上,但是根据实例的大小有所区别。如下,实例大小小于85000Byte时,则将该实例创建在GC堆上;而当实例太大了,则将该实例创建在LOH(大对象堆)上。

嵌套分两种情况。值类型中嵌套了引用类型,struct有个成员是个class。该引用类型将作为值类型的成员变量,堆栈上保存该成员的引用,而成员的实际数据在托管堆上。

第二种情况,引用类型嵌套值类型,那么值类型作为成员的话,在托管堆中。如果是某个函数成员中的局部变量,那么还是跟值类型的老家一样,在堆栈上。

补益结束了!

注意字符串的行为方式有所不同,因为字符串是不可变的,你硬要改它的值,就会创建另一个字符串对象。所以字符串无法采用一般引用类型的行为方式。在方法调用中,对字符串所做的任何改变都不会影响原始字符串。

默认值传递,C#要求对传递给方法的参数进行初始化,no matter passing parameters by value or by reference, initializing variable is important.

想把默认的值传递变成引用传递,用ref关键字。

static void Study(ref int hours)

{  

  hours++;//I don‘t like C#, but I don‘t like java, too.

}

Sometimes,我们想从函数的执行中输出多个值怎么办?用out关键字。这时候就不关心传入参数的值了,但是规定必须初始化,编译器会用out关键字来初始化。在方法的输入参数前面加上out前缀,传递给该方法的变量可以不初始化。该变量会默认引用传递。

今天就学这么多吧~tlide~待会背点单词!我是真的不爱学习呀!我好懒!改变自己!一点点改变!如果谁不小心看到了这个文章,摆脱赶紧看别的,别浪费时间~

string PrintHappy(string when, string why){

return when+" "+why;

}

When you invoke this method, you needn‘t pass parameters in the order of definition.

Like this, PrintHappy(why:"I picked up some money on the way home",when:"8 pm");

怎么关于参数的还有那么多?烦死了!还有个可选参数,以前用过。有的参数你可以赋个默认值给它,但是可选参数必须是方法定义的最后一个参数。

int TestMethod(int notOpetionalNumber, int optionalNumber=10){}//Mandatory

可选参数不行就用方法重载。方法名相同,返回类型可以不同,但是返回类型不同不作为判断他俩不同的依据。

哎呀!看完了,下一小节是属性!基本会了,明天写!

时间: 2024-08-24 09:24:12

C# 类的介绍,参数传递,各种符号说法的相关文章

UML类图介绍以及PlantUML使用方法

类的UML表示方法 UML介绍 类图,是UML(统一建模语言)中用于描述"类"以及"类与类"之间的示意图.它形象的描述出了系统的结构,帮助人们理解系统. 类图是在"所有的UML图"中,实用频率非常之高:掌握它对于我们软件设计,以及交流都很有帮助. 对于类图而言,它的基本单位是类.类主要由三部分组成:类名.属性.操作(函数).UML类的表示大致如下: 类名 类的名称 属性 UML类图中,属性的基本格式: 可见性 名称: 类型 [=缺省值] 可见性

设置定时任务(Timer类的介绍)

设置定时任务(Timer类的介绍) 在我们的许多项目中,我们都需要用到定时任务,因此想借此博文来对定时任务进行一个介绍. 设置定时任务步骤如下: 先new一个Timer对象 Timer timer = new Timer() ; 然后调用它的schedule方法,例如:timer.schedule(new Task(), 5 * 1000,5*1000); 相信上面的代码我们不会陌生,即使我们没有写过,但我们一定见到过. 要注意的是:上面第二步所提到的schedule方法有四个重载的方法.下面进

Tstrings类简单介绍及实例

用TStrings保存文件;var  S: TStrings;begin  S := TStringList.Create();  { ... }  S.SaveToFile('config.txt', TEncoding.UTF8); Tstrings类简单介绍及实例 在DELPHI的程序开发过程中Tstrings类的使用是比较频繁的,下面就此类在DELPHI5的开发环境中进行一下简单的介绍及实例(注:本文只对tstrings类中的方法及属性进行介绍, 从其父类继承的属性及方法不属本文讨论之内

【Entity Framework】初级篇--ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager类的介绍

本节,简单的介绍EF中的ObjectContext.ObjectQuery.ObjectStateEntry.ObjectStateManager这个几个比较重要的类,它们都位于System.Data.Entity.dll下的System.Data.Objects命名空间下.在后续的章节中,我们经常会用到它们的某些方法,以便完成我们的某些操作或目的.本节,简单的说明一下以后我们可能会用到的各个类的方法,以方便我们后续的学习. ObjectContext封装 .NET Framework 和数据库

面向对象中关于元类的介绍与异常处理

一.异常处理 1. 什么是异常处理     异常是错误发生的信号,一旦程序出错就会产生一个异常,如果该异常     没有被应用程序处理,那么该异常就会抛出来,程序的执行也随之终止 异常包含三个部分:         1. traceback异常的追踪信息         2. 异常的类型         3. 异常的信息 错误分为两大类:         1. 语法上的错误:在程序运行前就应该立即修正         2. 逻辑上的错误 2. 为何要异常处理 避免程序因为异常而崩溃,所以在应用程

Google guava工具类的介绍和使用

概述 工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率.谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来.所以就诞生了guava. guava的优点: 高效设计良好的API,被Google的开发者设计,实现和使用 遵循高效的java语法实践 使代码更刻度,简洁,简单 节约时间,资源,提高生产力 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如: 集合 [collections] 缓存 [caching] 原生类型支持 [

Object类简单介绍

在java语言中有一个特殊类Object,该类是java.lang类库中的一个类,所有的类都是直接或间接地继承该类而得到的.所以说Object类是所有类的源. 故,我们今天就来好好地了解一下Object类的方法. Object类中有如下的一些方法: protected Object clone(),boolean equals(Object obj),protected void finalize(),Class<?>getClass() int hashCode(),void notify(

android中画图类的介绍Path

Paint类相关属性: /** * Paint类介绍 * * Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色, * 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法, * 大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关. * * 1.图形绘制 * setARGB(int a,int r,int g,int b); * 设置绘制的颜色,a代表透明度,r,g,b代表颜色值. * * setAlpha(int a); * 设置绘制图形的透明度. *

volley源码解析(二)--Request&lt;T&gt;类的介绍

在上一篇文章中,我们已经提到volley的使用方式和设计的整体思路,从这篇文章开始,我就要结合具体的源码来给大家说明volley功能的具体实现. 我们第一个要介绍的类是Request<T>这个一个抽象类,我将Request称为一个请求,通过继承Request<T>来自定义request,为volley提供了更加灵活的接口. Request<T>中的泛型T,是指解析response以后的结果.在上一篇文章中我们知道,ResponseDelivery会把response分派