c#基础 之对象和类型

1、类和结构

结构与类的区别是它们在内存中的存储方式(类是存储在堆(heap)上的引用类型,而结构是存储在堆栈(stack)上的值类型)、访问方式和一些特征(如结构不支持继承)。较小的数据类型使用结构可提高性能。但在语法上,结构与类非常相似,主要的区别是使用关键字struct代替class来声明结构。

 

一、预备知识程序的内存分配
 
一个由C/C++编译的程序占用的内存分为以下几个部分
 
1、栈区(stack由编译器自动分配释放,存放函数的参数值,局部变量的值等。其
 
操作方式类似于数据结构中的栈。
 
2、堆区(heap一般由程序员分配释放,若程序员不释放,程序结束时可能由OS
 
。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
 
3、全局区(静态区)(static,全局变量和静态变量的存储是放在一块的,初始化的
 
全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另
 
一块区域。 - 程序结束后由系统释放。
 
4、文字常量区常量字符串就是放在这里的。程序结束后由系统释放
 
5、程序代码区存放函数体的二进制代码。

 

 

2数组或其他引用类型(如类)传递给方法,方法就会使用该引用改变这个数组中的值,而新值会反射到原来的数组对象上

 

using System;

 

namespace  Wrox.ProCSharp. ParameterTestSample
  {
  class ParameterTest
  {
  static void SomeFunction(int[] ints, int i)
  {
  ints[0] = 100;
  i = 100;
  }
 
  public static int Main()
  {
  int i = 0;
  int[] ints = { 0, 1, 2, 4, 8 };
  // Display the original values
  Console.WriteLine("i = " + i);
  Console.WriteLine("ints[0] = " + ints[0]);
Console.WriteLine("Calling SomeFunction...");

 

          // After this method returns, ints will be changed,
  // but i will not
  SomeFunction(ints, i);
  Console.WriteLine("i = " + i);
  Console.WriteLine("ints[0] = " + ints[0]);
  return 0;
  }
  }
  }

 

结果如下:

csc  ParameterTest.cs
  Microsoft (R) Visual C# Compiler version 9.00.20404
  for Microsoft (R) .NET Framework version 3.5
  Copyright (C) Microsoft Corporation. All rights reserved.

 

ParameterTest.exe
  i = 0
  ints[0] = 0
  Calling SomeFunction...
  i = 0
  ints[0] = 100

 

 

 

3ref参数

方法对变量所作的任何改变都会影响原来对象的值:

static void  SomeFunction(int[] ints, ref  int i)
  {
  ints[0] = 100;
  i = 100;       //the change to i will persist  after SomeFunction() exits
  }

 

在调用该方法时,ref 关键字的变量需要赋值(初始化)还需要添加ref关键字:

Int i=1;

 

SomeFunction(ints,  ref i);

 

4out关键字

static void  SomeFunction(out int i)
  {
  i = 100;
  }

 

public static  int Main()
  {
  int i; // note how i is declared but not initialized
  SomeFunction(out i);
  Console.WriteLine(i);
  return 0;
  }

 

参数只需声明,不用初始化。方法体内,必须对out 参数赋值。否则报错。

 

5、方法的重载

方法名相同、但参数的个数和类型不同。因为C#不直接支持可选参数,所以需要使用方法重载来达到此目的

 

#warning

6、属性

public string  Name
  {
  get
  {
  return _name;
  }
  set
  {
  _name = value;
  }
  }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值