C#从零开始学习(类型和引用)(4)

server/2024/10/24 12:20:18/

类型

本章所有的代码都放在
https://github.com/hikinazimi/head-first-Csharp

整型

  • byte: 0~255
  • sbyte: -128~127
  • short: -32768~32767
  • int: -2147483648~2147483647
  • long: -9223372036854775808~9223372036854775807

以u开头的无符号整数
ushort,uint,ulong

浮点

  • float: (6~9位有效数字)
  • double: (15~17位有效数字)
  • decimal: (28~29位有效数字) ,处理货币时使用decimal存储

字符串

Convert类转换
Convert.ToByte(“10111”,2); //return 23
Convert.ToInt16(“1111111111111111”,2); return 32767

引用

在C#中,引用类型(Reference Types)是指那些在内存中存放在堆(Heap)上的数据类型。引用类型的变量存储的不是实际的数据,而是指向数据的引用(或者说是内存地址)。当创建一个引用类型的变量时,实际上是在堆上为该变量的数据分配了内存,并且变量存储了这块内存的地址。

引用类型的特点:

  • 存储位置:数据存储在堆上,变量存储的是数据的内存地址。

  • 内存分配:在堆上动态分配内存,因此大小不固定,可以在运行时确定。

  • 默认值:引用类型的默认值是 null,表示没有引用任何对象。

  • 内存回收:由垃圾回收器(Garbage Collector, GC)管理,当没有变量引用该对象时,GC 可能会回收其内存。

  • 赋值:赋值会复制对象的引用,而不是对象本身。两个变量可能引用同一个对象。

  • 方法和属性:可以拥有方法和属性,因为它们通常代表更复杂的数据结构。

SloppyJoe 菜单价格显示

创建一个WPF应用,生成随机菜单

  1. 创建MenuItem类
  2. 添加制作方法
  3. 创建xaml窗口
  4. 添加后代逻辑代码

创建MenuItem,这是菜单

class MenuItem{public static Random Randomizer = new Random();public string[] Proteins = { "Roast beef", "Salami", "Turkey", "Ham", "Pastrami", "Tofu" };public string[] Condiments = { "yellow mustard", "brown mustard", "honey mustard", "mayo", "relish", "french dressing" };public string[] Breads = { "rye", "white", "wheat", "pumpernickel", "a roll" };public string Description = "";public string Price;public void Generate(){string randomProtein = Proteins[Randomizer.Next(Proteins.Length)];string randomCondiment = Condiments[Randomizer.Next(Condiments.Length)];string randomBread = Breads[Randomizer.Next(Breads.Length)];Description = randomProtein + " with " + randomCondiment + " on " + randomBread;decimal bucks = Randomizer.Next(2, 5);decimal cents = Randomizer.Next(1, 98);decimal price = bucks + (cents * 0.01M);Price = price.ToString();}}

public static Random Randomizer = new Random();使用Random使用静态变量,这样每个菜单都使用同一个Random实例,产生的随机数不同

界面左边显示菜单,右边显示金额

<Window x:Class="SloppyJoe.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:SloppyJoe"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid Margin="20"><Grid.RowDefinitions><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="5*"/><ColumnDefinition/></Grid.ColumnDefinitions><TextBlock x:Name="item1" FontSize="18px" /><TextBlock x:Name="price1" FontSize="18px" HorizontalAlignment="Right" Grid.Column="1"/><TextBlock x:Name="item2" FontSize="18px" Grid.Row="1"/><TextBlock x:Name="price2" FontSize="18px" HorizontalAlignment="Right"Grid.Row="1" Grid.Column="1"/><TextBlock x:Name="item3" FontSize="18px" Grid.Row="2" /><TextBlock x:Name="price3" FontSize="18px" HorizontalAlignment="Right" Grid.Row="2"Grid.Column="1"/><TextBlock x:Name="item4" FontSize="18px" Grid.Row="3" /><TextBlock x:Name="price4" FontSize="18px" HorizontalAlignment="Right" Grid.Row="3"Grid.Column="1"/><TextBlock x:Name="item5" FontSize="18px" Grid.Row="4" /><TextBlock x:Name="price5" FontSize="18px" HorizontalAlignment="Right" Grid.Row="4"Grid.Column="1"/><TextBlock x:Name="item6" FontSize="18px" Grid.Row="5" /><TextBlock x:Name="price6" FontSize="18px" HorizontalAlignment="Right" Grid.Row="5"Grid.Column="1"/><TextBlock x:Name="guacamole" FontSize="18px" FontStyle="Italic" Grid.Row="6"Grid.ColumnSpan="2" HorizontalAlignment="Right" VerticalAlignment="Bottom"/></Grid></Window>

最终结果如下
在这里插入图片描述
至此,我们就学习完了第四章,然后让我们复习一下本章讲了什么

  • 学习了C#中常见的数据类型以及引用的使用

http://www.ppmy.cn/server/134446.html

相关文章

perl模式匹配修饰符

perl模式匹配修饰符 如题&#xff0c;perl模式匹配修饰符含义 perl有以下几种模式匹配修饰符&#xff1a;igcmsxonpadre 修饰符含义--i匹配时忽略大小写g全局匹配。默认情况下&#xff0c;正则表达式/adc/匹配"adcdabc"的时候&#xff0c;将只匹配左边的abc&#x…

【力扣打卡系列】滑动窗口与双指针(无重复字符的最长子串)

坚持按题型打卡&刷&梳理力扣算法题系列&#xff0c;语言为go&#xff0c;Day7 无重复字符的最长子串 题目描述解题思路 不含重复字符——》考虑使用哈希表来存储记录为了提高效率也可以用数组&#xff0c;hash : [128]bool{} &#xff08;因为存的是字符的ASCLL码&…

27.7 开启一致性哈希环变更监听处理和consul-watch服务

本节重点介绍 : 开启一致性哈希环变更监听处理 这个服务的节点变更了(节点宕机、扩容)就对哈希环进行重置 consul中watch 服务中节点变化 遍历所有的service和变更chan的map&#xff0c;开启watch 开启一致性哈希环变更监听处理 位置 service/shard_service.go当这个服务的…

python作业02.

进制转换 #编写代码&#xff0c;实现十进制数据转换二进制、二进制转换十进制、十进制转换十六进制、十六进制转换十进制的代码实现 #十进制转二进制 #定一个转换函数 def decimal_to_binary(decimal):if decimal 0:return "0"binary ""while decimal &…

10_ Linux软件安装指南:RPM、YUM、源码安装

系列文章导航&#xff1a;01_Linux基础操作CentOS7学习笔记-CSDN博客 文章目录 1. RPM包安装2. YUM包管理器3. 源码安装 在Linux系统中&#xff0c;软件安装是日常管理中的一项基本任务。本文将详细介绍三种常见的软件安装方法&#xff1a;RPM包安装、YUM包管理器安装和源码编…

牛客周赛63

https://ac.nowcoder.com/acm/contest/91592 好数 简单的判断两位数&#xff0c;且十位等于个位 #include <bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define int long long using namespace std; using ll long long; using pii …

SIP 业务举例之 Call Forwarding - No Answer(无应答呼叫转移)

目录 1. Call Forwarding - No Answer 简介 2. RFC5359 的 Call Forwarding - No Answer 信令流程 呼转开始 呼转完成 3. Call Forwording - No Answer 过程总结 博主wx:yuanlai45_csdn 博主qq:2777137742 想要 深入学习 5GC IMS 等通信知识(加入 51学通信),或者想要 …

原型模式和建造模式的区别

原型模式&#xff08;Prototype Pattern&#xff09;和建造者模式&#xff08;Builder Pattern&#xff09;虽然都是创建型设计模式&#xff0c;但它们的应用场景和实现方式有着显著的区别。以下是二者的详细对比&#xff1a; 1. 意图和应用场景 原型模式&#xff1a; 意图&a…