基本的c#对象与对象交互

本文关键字:对象 交互 | 更新日期: 2023-09-27 18:07:20

我目前正在浏览各种资源并试图学习c# OOP。我还没有讲过任何东西但是我尝试了对象与对象的交互。不幸的是,它没有按计划进行,我对我应该引用的对象有点困惑。我想创造一种简单的攻击方法,即减少另一个对象的生命值,从而获得对象与对象交互的基础。下面是代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            Dog milo = new Dog("Sparky");
            Dog ruffles = new Dog("Ruffles");
            milo.Attack(ruffles);
            Console.ReadLine();
        }
    }
    class Dog
    {
        public string name { get; set; }
        public int health = 100;

        public Dog(string theName)
        {
            name = theName;

            public void Attack(Dog theDog)
            {
                Console.WriteLine("{0} attacks {1}.", this.name, theDog);
                LoseHealth(theDog);
            }
            public void LoseHealth()
            {
                Console.WriteLine("{0} loses health!", theDog);
                theDog -= 5;
            }
        }
    }
}

代码根本不起作用。知道我哪里做错了吗?谢谢你的帮助。

基本的c#对象与对象交互

狗类的代码有点乱。

Attack和LoseHealth方法在构造函数中的

不提及健康值和名称,只提及theDog。

看看这个

class Dog
{
    public string name { get; set; }
    public int health = 100;

    public Dog(string theName)
    {
        name = theName;
    }
    public void Attack(Dog theDog)
    {
        Console.WriteLine("{0} attacks {1}.", this.name, theDog.name);
        LoseHealth(theDog);
    }
    public void LoseHealth(Dog theDog)
    {
        Console.WriteLine("{0} loses health!", theDog.name);
        theDog.health -= 5;
    }
}

额外OO提示:

像这样改变攻击和LoseHealth方法会更有意义:

public void Attack(Dog theDog)
{
    Console.WriteLine("{0} attacks {1}.", this.name, theDog.name);
    theDog.LoseHealth(5);
}
public void LoseHealth(int damage)
{
    Console.WriteLine("{0} loses health!", name);
    this.health -= damage;
}

你做了theDog -= -5。但是theDog不是一个数字。你需要参考狗的健康状况。您还需要将theDog传递给LoseHealth()函数。改成这样:

theDog.health -= 5;

使用点表示法访问theDog的运行状况。

但是,您的函数也嵌套在构造函数中。移动Attack()LoseHealth(),使它们在类中,而不是在构造函数体中。你应该像这样结束:

class Dog
    {
    public string name { get; set; }
    public int health = 100;

    public Dog(string theName)
        {
            name = theName;               
        }
    public void Attack(Dog theDog)
            {
                Console.WriteLine("{0} attacks {1}.", this.name, theDog);
                LoseHealth(theDog);
            }
    public void LoseHealth(Dog theDog)
            {
                Console.WriteLine("{0} loses health!", theDog);
                theDog.health -= 5;
            }
    }
顺便说一下,永远不要只是说"我的代码不工作"。解释它为什么不起作用。包括相关的异常消息,如果有的话