C# 我的属性只有一个get,但我希望每次调用它时该值都会更改
我已经为此挣扎了几个小时了。我只想在我的房子里使用一个get。当我调用一个函数时,它从属性(10)中得到一个数字,并且应该从10中减去1,这就是9。但我不知道如何保存这个9,每次减去1,所以下次我调用它时,它变成了8。我希望这足够清楚 main.cs:C# 我的属性只有一个get,但我希望每次调用它时该值都会更改,c#,properties,interface,C#,Properties,Interface,我已经为此挣扎了几个小时了。我只想在我的房子里使用一个get。当我调用一个函数时,它从属性(10)中得到一个数字,并且应该从10中减去1,这就是9。但我不知道如何保存这个9,每次减去1,所以下次我调用它时,它变成了8。我希望这足够清楚 main.cs: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 {
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
do
{
Zwakmonster zwakmonster = new Zwakmonster();
Sterkmonster sterkmonster = new Sterkmonster();
List<IMonster> monster = new List<IMonster>();
string lijn;
string test = "exit";
string nieuwelijn;
string zwak = "zwakmonster";
string sterk = "sterkmonster";
string groen = "groen";
string geel = "geel";
Sterkmonster henk = new Sterkmonster();
henk.Naam = sterk;
henk.Kleur = groen;
Zwakmonster piet = new Zwakmonster();
piet.Kleur = geel;
piet.Naam = zwak;
Console.WriteLine("Schrijf zwakmonster_iemand of sterkmonster_iemand");
lijn = Console.ReadLine();
if (lijn == test)
{
Environment.Exit(0);
}
else if (lijn.StartsWith("hit"))
{
if (lijn.StartsWith("hit "))
{
nieuwelijn = lijn.Remove(0, 4);
if (nieuwelijn == sterk)
{
henk.Hit();
Console.WriteLine(sterkmonster);
}
else if (nieuwelijn == zwak)
{
piet.Hit();
Console.WriteLine(zwakmonster);
}
else
{
Console.WriteLine("iets ging er fout");
}
}
else
{
Console.WriteLine("Ben je misschien een spatie vergeten na ''hit''?\n");
}
}
else
{
Console.WriteLine("Verkeerd commando ingevoerd\n");
}
} while (1 == 1);
}
}
}
zwakmonster.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Zwakmonster : IMonster
{
private string mijnNaam;
private string mijnKleur;
private int mijnLevens = 10;
private int nieuwelevens;
public string Naam
{
get { return mijnNaam; }
set { mijnNaam = value; }
}
public string Kleur
{
get { return mijnKleur; }
set { mijnKleur = value; }
}
public int Levens
{
get { return mijnLevens; }
}
public void Hit()
{
mijnLevens = mijnLevens - 1;
nieuwelevens = mijnLevens;
Console.WriteLine(nieuwelevens);
}
}
}
mijnLevens的值始终为10。 您需要将减少的值分配回mijnLevens,以更改此设置
public void Hit()
{
newlife = mijnLevens - 1;
}
对此
public void Hit()
{
mijnLevens = mijnLevens - 1;
newlife = mijnLevens;
}
这将确保减少mijnLevens。目前,mijnLevens总是10岁
更改此项:
do
{
Zwakmonster zwakmonster = new Zwakmonster();
对此
Zwakmonster zwakmonster = new Zwakmonster();
do
{
这样你就不会每次迭代都创建一个新的对象。艾伦·埃尔德已经给出了正确的答案,为了让事情变得不那么复杂,我只使用一个变量来计算你的生命
class Zwakmonster : IMonster
{
private string mijnNaam;
private string mijnKleur;
private int lives = 10;
public string Naam
{
get { return mijnNaam; }
set { mijnNaam = value; }
}
public string Kleur
{
get { return mijnKleur; }
set { mijnKleur = value; }
}
public int Levens
{
get { return lives; }
}
public void Hit()
{
lives = lives - 1;
}
}
它实际上不起作用,当我再次调用hit时,它只是一次又一次地转到9,而不是8。因此,当你在控制台行反复输入“hit zwakmonster_name”时,它会变成9,然后是8,然后是7等等,这很难理解,因为它不是用英语写的;但是移动你的Zwakmonster Zwakmonster=new Zwakmonster();超越国家;你现在每次都在创建一个新的实例,所以mijnLevens被设置回0。我已经得到了awnser,我总是在写“hit zwakmonster_name”时创建一个新的怪物,它一直在创建一个新的zwakmonster_name,设置为10,当我再次写“hit zwakmonster_name”时,它会生成一个带有10livesI编辑我的问题的新怪物,当你运行这个,并键入“hit zwakmonster”时,它必须转到19,当你再次键入它时,它必须转到18 etc,但当我调用hit()时;我再次希望它是8,夜晚7等等,一旦值存储在“生命”中,它将随着每次命中而递减。你试过这个代码吗?您是否有其他方法访问该值?更新:看看Allans的评论,他发现了你的问题,你在每个循环中都创建了一个新的怪物。我已经得到了awnser,我总是在写“hit zwakmonster__name”时创建一个新的怪物,它不断生成一个新的zwakmonster_名称,设置为10,当我再次写“hit zwakmonster_name”时,它生成一个新的,我编辑了我的问题,当你运行这个,并且输入“hit zwakmonster”时,它必须转到19,当你再次输入它时,它必须转到18等等。我很糟糕,当我在cmd中写下行“hit zwakmonster_uuname”时,我一直在制作一个新怪物。我编辑了我的任务,当你运行这个,输入“hit zwakmonster”时,它必须转到19,当你再次输入它时,它必须转到18等等
class Zwakmonster : IMonster
{
private string mijnNaam;
private string mijnKleur;
private int lives = 10;
public string Naam
{
get { return mijnNaam; }
set { mijnNaam = value; }
}
public string Kleur
{
get { return mijnKleur; }
set { mijnKleur = value; }
}
public int Levens
{
get { return lives; }
}
public void Hit()
{
lives = lives - 1;
}
}