如何创建一个空对象字段
本文关键字:一个 对象 字段 创建 何创建 | 更新日期: 2023-09-27 17:57:08
我需要将一个类似流氓的游戏作为一个项目编写,但我有一个小问题。有时我需要在使用开关创建哪个对象之间进行选择。我想在开关外部声明一个"空"对象,然后开关用值填充对象。这就是我想做的:
Console.WriteLine("What race would you like to be?")
int answer = Convert.ToInt32(Console.ReadLine());
Object heroRace; // This is where the problem comes in
switch(answer)
{
case 1: heroRace = new Orc(); break;
case 2: heroRace = new Elf(); break;
}
我希望heroRace
不在交换机范围之外以供重复使用。如果我能创建这样的东西,这将大大简化我的程序。
在访问对象的成员之前,您需要将对象强制转换为更具体的类型
Object o=new Orc();
((Orc)o).methodNameWithinOrc();
但这可能会导致强制转换异常。
例如。。
((Elf)o).methodNameWithinOrc();
将导致强制转换异常,因为o
是Orc
的对象,而不是Elf
的对象。
最好在使用运算符强制转换之前检查对象是否属于特定类is
if(o is Orc)
((Orc)o).methodNameWithinOrc();
Object
本身是没有用的,除非你覆盖ToString
、GetHashCode
..方法。
它应该像
LivingThingBaseClass heroRace;
Orc
和Elf
应该是LivingThingBaseClass
的子类
LivingThingBaseClass
可以包含move
、speak
、kill
等方法。这些方法中的全部或部分将被Orc
覆盖,Elf
根据您的要求,LivingThingBaseClass
可以是abstract
类,甚至是interface
一般方法是:
interface IRace //or a base class, as deemed appropriate
{
void DoSomething();
}
class Orc : IRace
{
public void DoSomething()
{
// do things that orcs do
}
}
class Elf : IRace
{
public void DoSomething()
{
// do things that elfs do
}
}
现在 heroRace 将被声明(外部交换机)为:
IRace heroRace;
在交换机内,您可以:
heroRace = new Orc(); //or new Elf();
然后。。。
heroRace.DoSomething();
class test1
{
int x=10;
public int getvalue() { return x; }
}
class test2
{
string y="test";
public string getstring() { return y;}
}
class Program
{
static object a;
static void Main(string[] args)
{
int n = 1;
int x;
string y;
if (n == 1)
a = new test1();
else
a = new test2();
if (a is test1){
x = ((test1)a).getvalue();
Console.WriteLine(x);
}
if (a is test2)
{
y = ((test2)a).getstring();
Console.WriteLine(y);
}
}
}