C#中值类型和引用类型的区别
1. 值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的 地址。
2. 值类型存取速度快,引用类型存取速度慢。
3. 值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用
4. 值类型继承自System.ValueType,引用类型继承自System.Object
5. 栈的内存分配是自动释放;而堆在.NET中会有GC来释放
6. 值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。
结构与类的不同
1.结构的定义
1 [修饰符] struct [结构名] [ : 接口名]
2 {
3 //结构成员
4 }
2.结构的构造函数
1 public struct Test
2 {
3 public Test()
4 {
5 //此方法编译不会通过,提示错误消息“结构不能包含显示的无参数构造函数”
6 }
7 }
3.结构的成员变量赋值
1 struct Test
2 {
3 static int x = 1;
4 static int y = x + 5;
5 //以下两句编译错误,在结构中可以给结构的静态变量赋初值,但不允许给结构的一个实例变量赋初值
6 int m = 2;
7 int n = m + 2;
8 }
4.创建对象的方法
使用new运算符来创建结构对象
直接用结构类型的变量来创建结构对象
5.继承
不允许结构从另外一个结构或类继承
1.结构的定义
1 [修饰符] struct [结构名] [ : 接口名]
2 {
3 //结构成员
4 }
2.结构的构造函数
1 public struct Test
2 {
3 public Test()
4 {
5 //此方法编译不会通过,提示错误消息“结构不能包含显示的无参数构造函数”
6 }
7 }
3.结构的成员变量赋值
1 struct Test
2 {
3 static int x = 1;
4 static int y = x + 5;
5 //以下两句编译错误,在结构中可以给结构的静态变量赋初值,但不允许给结构的一个实例变量赋初值
6 int m = 2;
7 int n = m + 2;
8 }
4.创建对象的方法
使用new运算符来创建结构对象
直接用结构类型的变量来创建结构对象
5.继承
不允许结构从另外一个结构或类继承
总结
1.结构是一种值数据类型,而类是一种引用类型
2.在结构中不允许定义无参数的构造函数(编译不会通过)
3.在结构中可以给结构的静态变量赋初值,但不能给结构的一个实例变量赋初值
4.创建结构对象可以不使用new关键字,直接用结构类型的变量来创建
5.不允许继承(可以将结构看成是密封的类)
上机练习三:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;a
namespace Day02
{
public partial class pingfen : Form
{
public pingfen()
{
InitializeComponent();
}
SE[] pass=new SE[3];
public void Qshut() {
pass[0] = new SE();
pass[0].Sid = 1;
pass[0].Sname = "小轩";
pass[0].Sage = 12;
pass[1] = new SE();
pass[1].Sid = 2;
pass[1].Sname = "小熊";
pass[1].Sage = 16;
pass[2] = new SE();
pass[2].Sid = 3;
pass[2].Sname = "小小";
pass[2].Sage = 15;
}
public void shout() {
foreach(SE item in pass){
ListViewItem lv = new ListViewItem(item.Sid.ToString());
lv.SubItems.Add(item.Sname);
lv.SubItems.Add(item.Sage.ToString());
lv.SubItems.Add("未评价");
lv.SubItems.Add("0");
listView1.Items.Add(lv);
}
}
private void pingfen_Load(object sender, EventArgs e)
{
Qshut();
shout();
}
private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
FromScore fro = new FromScore();
fro.data=listView1.SelectedItems[0];
fro.Show();
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Day02
{
public partial class FromScore : Form
{
public FromScore()
{
InitializeComponent();
}
public ListViewItem data;
private void FromScore_Load(object sender, EventArgs e)
{
textname.Text = data.SubItems[1].Text;
}
private void bpingfen_Click(object sender, EventArgs e)
{
data.SubItems[3].Text=textpingjia.Text;
data.SubItems[4].Text = textScore.Text;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Day02
{
class SE
{
public int Sid {get;set; }
public string Sname { get; set; }
public int Sage { get; set; }
public string pingjia { get; set; }
public int Score { get; set; }
}
}
简答题四:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace shapping
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入购买商品的原价:");
int yuan = int.Parse(Console.ReadLine());
Program dd=new Program();
dd.se(ref yuan);
Console.WriteLine("实际付款{0}",yuan);
Console.ReadLine();
}
public void se(ref int yuan) {
int i = yuan / 100;
for (int j = 0; j < i; j++) {
yuan -= 50;
}
}
}
}
简答题五:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Score
{
class Program
{
static void Main(string[] args)
{
int[] score1 = new int[3];
score1[0] = 65;
score1[1] = 70;
score1[2] = 75;
Console.Write("原分数:");
for (int i = 0; i < score1.Length; i++)
{
Console.Write(score1[i] + " ");
}
Program p = new Program();
p.score(ref score1);
int[] score2 = score1;
Console.WriteLine();
Console.Write("提分后:");
for (int i = 0; i < score2.Length; i++)
{
Console.Write(score2[i] + " ");
}
Console.ReadLine();
}
public void score(ref int[] a)
{
for (int i = 0; i < a.Length; i++)
{
a[i] += 5;
}
}
}
}