当前位置: 首页 > article >正文

C#从零开始学习(面向对象)(3)

面向对象

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

  • 类包含方法,方法中包含完成动作的语句,设计良好的类要合理的命名
  • 一些方法有一个返回类型,要使用return返回对应的类型
  • 以public void为开头,可以不用return
  • 从一个类创建一个新的对象时,称为这个类的一个实例
  • 使用static关键字声明类或者方法声明为静态,访问静态方法或字段不需要创建这个类的一个实列
  • 如果一个字段是静态的,他只有一个副本,由所有实例共享

PickRandomCards选牌程序

using System;
using System.Collections.Generic;
using System.Text;

namespace PickRandomCards
{
    class CardPicker
    {
        static Random random = new Random();
        public static string[] PickSomeCards(int numerOfCards)
        {
            string[] pickedCards = new string[numerOfCards];
            for (int i = 0; i < numerOfCards; i++)
            {
                pickedCards[i] = RandomValue() + " of " + RandomSuit();
            }
            return pickedCards;
        }

        private static string RandomValue()
        {
            //1-4的随机数
            int value = random.Next(1, 5);

            if (value == 1) return "Spades";
            if (value == 2) return "Hearts";
            if (value == 3) return "Culbs";
            return "Diamonds";
        }

        private static string RandomSuit()
        {
            int value = random.Next(1, 14);

            if (value == 1) return "Ace";
            if (value == 11) return "Jack";
            if (value == 12) return "Queen";
            if (value == 13) return "King";
            return value.ToString();
        }
    }
}

选牌为原型的WPF应用(PickACardUI)

将上面创建的游戏使用WPF构建
首先创建一个名为PickACardUI的WPF项目
然后在项目中添加上个项目中MainWindow.xaml.cs文件,鼠标右键项目名,然后添加文件
在这里插入图片描述
然后在文件中更改命名空间为项目名
在这里插入图片描述
使用Grid和StackPanel建立主窗口布局
使用StackPanel堆叠两个控件,使他们在同一个单元格中

        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Margin="20">
            
            <Label Content="How many cards should I pick?" FontSize="20"/>
            <Slider x:Name="numberOfCards" Minimum="1" Maximum="15" TickPlacement="BottomRight"
                IsSnapToTickEnabled="True" AutoToolTipPlacement="TopLeft" Foreground="Black"/>
        </StackPanel>

然后在按钮上定义点击的效果


<Button Grid.Row="1" Content="Pick some cards" FontSize="20" 
            HorizontalAlignment="Center" VerticalAlignment="Center" Click="Button_Click" />

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            string[] pickedCards = CardPicker.PickSomeCards((int)numberOfCards.Value);
            listOfCards.Items.Clear();
            foreach (string card in pickedCards)
            {
                listOfCards.Items.Add(card);
            }
        }

最终结果如下
在这里插入图片描述

JoeAndBob

创建一个类来跟踪他们分别有多少钱

  1. 创建两个"Guy"实例
  2. 设置对象的Cash和Name
  3. 增加方法来给钱和收钱
using System;
using System.Collections.Generic;
using System.Text;

namespace JoeAndBob
{
   class Guy
   {
       public string Name;
       public int Cash;

       public void WriteMyInfo()
       {
           Console.WriteLine(Name + " has " + Cash + " bucks.");
       }

       public int GiveCash(int amount)
       {
           if (amount <= 0)
           {
               Console.WriteLine(Name + "says: " + amount + "isn't a vaild amount");
               return 0;
           }
           if (amount > Cash)
           {
               Console.WriteLine(Name + " says: " + "I don't have the enough cash to give you" + Cash);
               return 0;
           }
           Cash -= amount;
           return amount;

       }

       public void ReceiveCash(int amount)
       {
           if (amount <= 0)
           {
               Console.WriteLine(Name + " says: " + amount + " isn't an amount I'll take");
           }
           else
           {
               Cash += amount;
           }
       }
   }
}

类的设计想法

  • 构建的程序需要解决一个问题
  • 思考程序会使用哪些实际实物
  • 为类和方法使用描述性的名字
  • 注意类之间的相似性

至此,我们就学习完了第三章,然后让我们复习一下本章讲了什么

  • 学习了C#中类的定义和应用
  • 学习了如何将一个简单的控制台项目改写成WPF应用

http://www.kler.cn/news/365095.html

相关文章:

  • 【Conda】Conda 超时设置及优化指南:提升包管理效率的关键
  • 爬虫结合项目实战
  • COVON全意卫生巾,轻薄透气,绵柔速干,马来西亚热销中
  • 电脑篇——Windows设置文件夹只读功能(高级篇)
  • AMD平台,5600X+6650XT,虚拟机安装macOS 15 Sequoia 15.0.1 (2024.10)
  • openrtp 音视频时间戳问题
  • 【模型学习】
  • 利用Spring Boot实现信息化教学平台
  • 博弈论 C++
  • Python 快速提取PowerPoint文档中的图片
  • 【Vue.js设计与实现】第三篇第9章:渲染器-简单Diff算法-阅读笔记
  • jupyter argparse问题
  • XML解析小坑记录[正则表达式解析]
  • 学习莫烦python---神经网络
  • 重生之“我打数据结构,真的假的?”--3.栈和队列(无习题)
  • PyTorch 介绍
  • Unity Apple Vision Pro 自定义手势识别交互
  • Vuex 状态机
  • Http模块总体设计
  • C# SM2 加签、验签工具
  • 【SpringCloud】Seata微服务事务
  • 【Flutter】路由与导航:基础路由与导航
  • HTML5教程(一)- 网页与开发工具
  • 基于RK3588/算能BM1684 AI盒子:综合视频智能AI分析系统建设方案(三)安全帽、睡岗检测、电瓶车、吸烟场景
  • 51单片机——OLED显示图片
  • Python进阶知识3