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

news2024/10/19 21:57:46

类型

本章所有的代码都放在
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.coloradmin.cn/o/2218778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RHCE【远程连接服务器】

目录 一、远程连接服务器简介 二、加密技术简介 SSH工作过程&#xff1a; &#xff08;1&#xff09;版本协商阶段 &#xff08;2&#xff09;密钥和算法协商阶段 &#xff08;3&#xff09;认证阶段 &#xff08;4&#xff09;会话请求阶段 &#xff08;5&#xff0…

KUKA外部自动配置(上)

通过外部PLC对机器人自动运行进程进行控制&#xff0c;其控制原理是&#xff1a;外部PLC通过外部自动运行接口向机器人控制系统发出机器人进程的相关信号&#xff08;如&#xff1a;运行许可、故障确认、程序启动等&#xff09;&#xff0c;机器人控制系统向外部PLC系统发送有关…

STM32 I2C通信协议详解

文章目录 STM32 I2C通信协议详解一、I2C协议概述二、物理层特性总线结构&#xff1a;引脚定义&#xff1a;电平特性&#xff1a;地址机制&#xff1a; 三、协议层机制起始信号&#xff1a;停止信号&#xff1a;数据有效性&#xff1a;应答信号&#xff08;ACK&#xff09;&…

机器学习|Pytorch实现天气预测

机器学习|Pytorch实现天气预测 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 电脑系统&#xff1a;Windows11 显卡型号&#xff1a;NVIDIA Quadro P620 语言环境&#xff1a;python 3.9.7 编译器&#x…

【Python】selenium遇到“InvalidArgumentException”的解决方法

在使用try……except 的时候捕获到这个错误&#xff1a; InvalidArgumentException: invalid argument (Session info: chrome112.0.5614.0) 这个错误代表的是&#xff0c;当传入的参数不符合期望时&#xff0c;就会抛出这个异常&#xff1a; InvalidArgumentException: invali…

常见TCP/IP协议基础——计算机网络

目录 前言常见协议基础常见协议-基于TCP的应用层协议常见协议-基于UDP的应用层协议常见协议-网络层协议习题自测1.邮件发送协议2.接收邮件协议端口3.建立连接4.层次对应关系5.FTP服务器端口 前言 本笔记为备考软件设计师时的重点知识点笔记&#xff0c;关于常见TCP/IP协议基础…

Java【多线程】wait和notify

目录 wait / notify 由于线程之间是抢占式执⾏的, 因此线程之间执⾏的先后顺序难以预知. 但是实际开发中有时候我们希望合理的协调多个线程之间的执⾏先后顺序. wait / notify 等待/通知 协调线程之间的执行逻辑的顺序的 可以让后执行的逻辑等待先执行的逻辑 虽然无法直接…

缓存框架JetCache源码解析-缓存定时刷新

作为一个缓存框架&#xff0c;JetCache支持多级缓存&#xff0c;也就是本地缓存和远程缓存&#xff0c;但是不管是使用着两者中的哪一个或者两者都进行使用&#xff0c;缓存的实时性一直都是我们需要考虑的问题&#xff0c;通常我们为了尽可能地保证缓存的实时性&#xff0c;都…

word取消自动单词首字母大写

情况说明&#xff1a;在word输入单词后首字母会自动变成大写 &#xff08;1&#xff09;点击菜单栏文件 &#xff08;2&#xff09;点击“更多”——>“选项” &#xff08;3&#xff09;点击“校对”——>“自动更正选项” &#xff08;4&#xff09;取消“句首字母大写…

WPF样式详解:行内样式、模板样式和页面样式的全方位分析

Windows Presentation Foundation (WPF) 是微软推出的一种用于构建桌面应用程序的UI框架。WPF 提供了强大的样式和模板机制&#xff0c;允许开发人员以声明的方式定义和复用UI元素的视觉外观。本文将深入探讨WPF的行内样式、模板样式和页面样式&#xff0c;帮助您在实际开发中更…

大数据linux操作系统

第一关&#xff1a;Linux的初体验 答案&#xff1a; cd / ls -a / &#xff08;里面有空格要注意&#xff09; 第二关&#xff1a;Linux的常用命令 答案&#xff1a; touch newfile mkdir newdir cp newfile newdir/newfileCpy 第三关&#xff1a;Linux查询命令帮助语句…

我在自动化测试方面犯过的3个大错误

每个人都会犯错误&#xff0c;但不管错误看起来有多糟糕&#xff0c;你都可以恢复过来&#xff0c;更重要的是&#xff0c;从错误中学习。 在软件开发过程的任何领域&#xff0c;从编码到测试&#xff0c;我们都会时不时地犯一些错误。通常&#xff0c;这些错误都很小&#xf…

Linux kernel 堆溢出利用方法

前言 本文还是用一道例题来讲解几种内核堆利用方法&#xff0c;内核堆利用手段比较多&#xff0c;可能会分三期左右写。进行内核堆利用前&#xff0c;可以先了解一下内核堆的基本概念&#xff0c;当然更好去找一些详细的内核堆的基础知识。 概述 Linux kernel 将内存分为 页…

Leetcode 字符串解码

该代码的算法思想可以分为以下几个步骤&#xff1a; 1. 使用栈来处理嵌套结构&#xff1a; 我们需要处理像 k[encoded_string] 这种格式&#xff0c;其中的 encoded_string 可能是嵌套的&#xff0c;即像 3[a2[c]] 这样的输入。因此&#xff0c;我们可以借助 栈&#xff08;S…

音视频基础知识分享

音视频基础知识分享 RKMedia的各个组件及其交互 首先上图&#xff1a; 考虑到公司业务主要是相机&#xff0c;所以&#xff0c;主要去关注图像数据流&#xff0c;对于音频数据流直接忽略。 图像数据流向&#xff1a; Camera Sensor将光信号转换成电信号&#xff08;Raw数据&…

【大模型】AI视频课程制作工具开发

1. 需求信息 1.1 需求背景 讲师们在制作视频的过程中&#xff0c;发现录制课程比较麻烦&#xff0c;要保证环境安静&#xff0c;保证录制过程不出错&#xff0c;很容易反复重复录制&#xff0c;为了解决重复录制的工作量&#xff0c;想通过 ai 课程制作工具&#xff0c;来解决…

Rust引用与C++取地址、引用的区别(C++引用、Rust解引用、C++指针)

文章目录 Rust引用与C取地址和引用的比较一、内存安全与管理Rust的内存安全机制C的内存管理 二、引用和取地址Rust的引用C的引用和取地址 三、代码示例比较修改数据的安全性Rust示例C示例 四、结论 Rust引用与C取地址和引用的比较 在程序设计语言的世界里&#xff0c;Rust和C都…

【C++】string类(接口使用详解 下)

我们接着【C】string类&#xff08;接口使用详解 上&#xff09;-CSDN博客 继续介绍string的使用。 1.string类对象的修改操作 我们就说一下用的比较多的接口。 1.1 operator 这个接口可以尾插一个字符&#xff0c;或者一个字符串&#xff0c;或者一个对象。 string s1(&qu…

Java—类和对象习题讲解

如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 目录 习题一&#xff1a; 习题二&#xff1a; 习题三&#xff1a;.import static 能够导入一些静态方法 习题四&#xff1a; 习题五&#xff1a; 习题六&#xff1…

[LeetCode] 415.字符串相加

给定两个字符串形式的非负整数 num1 和num2 &#xff0c;计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库&#xff08;比如 BigInteger&#xff09;&#xff0c; 也不能直接将输入的字符串转换为整数形式。 示例 1&#xff1a; 输入&#xff…