C# 子类成员初始化
我创建了两个类来替换C# 子类成员初始化,c#,initialization,subclass,member,C#,Initialization,Subclass,Member,我创建了两个类来替换点(两个变体)的函数,只是为了测试它们,我就是这样创建它们的: Entity.cs: namespace Xnagame { class Player { public class float2 { public float X { get; set; } public float Y { get; set; } } public class i
点
(两个变体)的函数,只是为了测试它们,我就是这样创建它们的:
Entity.cs:
namespace Xnagame
{
class Player
{
public class float2
{
public float X { get; set; }
public float Y { get; set; }
}
public class int2
{
public int X { get; set; }
public int Y { get; set; }
}
public int2 Position { get; set; }
public int angle { get; set; }
public float speed { get; set; }
public float2 velocity { get; set; }
public Player CreatePlayer()
{
Position = new Player.int2();
Player player = new Player();
return player;
}
}
}
如您所见,这两个点类都有一个X
和Y
变量(我不确定这是否是设置它们的方法,如果不是,请告诉我),并且这些类用于在CreatePlayer()
方法中实例化的位置和速度实例中
游戏1.cs:
namespace Xnagame
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
private Texture2D playerimage;
private Texture2D background;
Player player = Player.CreatePlayer();
现在的问题是,当CreatePlayer()
方法尝试将其“player”返回给本地播放器时,它会给出:
非静态字段、方法或属性需要对象引用Xnagame.Player.CreatePlayer()
错误
我还尝试了新的关键字,它给了我:
Xnagame.Player.CreatePlayer()
是一个方法,但使用起来就像类型一样
您的
CreatePlayer
方法是一个实例方法-换句话说,必须在现有实例上调用它。您可能希望将其设置为静态:
public static Player CreatePlayer()
然后应该删除Position=new Player.int2()
行-创建一个播放器不应该更改现有播放器的位置
(我还强烈建议将嵌套类型提取为不可变的顶级结构,并将它们重命名为类似于
Int32Position
和SinglePosition
——尽管您可能会发现框架已经有类似的功能。您还应使所有属性遵循.NET命名约定。)您的CreatePlayer
方法是一个实例方法-换句话说,必须在现有实例上调用它。您可能希望将其设置为静态:
public static Player CreatePlayer()
然后应该删除Position=new Player.int2()
行-创建一个播放器不应该更改现有播放器的位置
(我还强烈建议将嵌套类型提取为不可变的顶级结构,并将它们重命名为类似于
Int32Position
和SinglePosition
——尽管您可能会发现框架已经有类似的功能。您还应使所有属性遵循.NET命名约定。)您的CreatePlayer
方法是一个实例方法-换句话说,必须在现有实例上调用它。您可能希望将其设置为静态:
public static Player CreatePlayer()
然后应该删除Position=new Player.int2()
行-创建一个播放器不应该更改现有播放器的位置
(我还强烈建议将嵌套类型提取为不可变的顶级结构,并将它们重命名为类似于
Int32Position
和SinglePosition
——尽管您可能会发现框架已经有类似的功能。您还应使所有属性遵循.NET命名约定。)您的CreatePlayer
方法是一个实例方法-换句话说,必须在现有实例上调用它。您可能希望将其设置为静态:
public static Player CreatePlayer()
然后应该删除Position=new Player.int2()
行-创建一个播放器不应该更改现有播放器的位置
(我还强烈建议将嵌套类型提取为不可变的顶级结构,并将它们重命名为类似于
Int32Position
和SinglePosition
——尽管您可能会发现框架已经有类似的功能。您还应使所有属性遵循.NET命名约定。)您需要使用静态函数直接从这样的类调用
public static Player CreatePlayer()
{
//all the code
}
您需要使用静态函数直接从这样的类调用
public static Player CreatePlayer()
{
//all the code
}
您需要使用静态函数直接从这样的类调用
public static Player CreatePlayer()
{
//all the code
}
您需要使用静态函数直接从这样的类调用
public static Player CreatePlayer()
{
//all the code
}
问题是您正在使用实例方法来创建实例 您有两个选择: 1) 使用默认构造函数
class Player
{
// Other subclasses, and properties.
public Player()
{
// Note: I added the other instance value just for fun.
Position = new Player.int2();
velocity = new Player.float2();
}
}
2) 使用静态构造函数方法。(这些通常仅在特定的环境中使用。)
问题是您正在使用实例方法来创建实例 您有两个选择: 1) 使用默认构造函数
class Player
{
// Other subclasses, and properties.
public Player()
{
// Note: I added the other instance value just for fun.
Position = new Player.int2();
velocity = new Player.float2();
}
}
2) 使用静态构造函数方法。(这些通常仅在特定的环境中使用。)
问题是您正在使用实例方法来创建实例 您有两个选择: 1) 使用默认构造函数
class Player
{
// Other subclasses, and properties.
public Player()
{
// Note: I added the other instance value just for fun.
Position = new Player.int2();
velocity = new Player.float2();
}
}
2) 使用静态构造函数方法。(这些通常仅在特定的环境中使用。)
问题是您正在使用实例方法来创建实例 您有两个选择: 1) 使用默认构造函数
class Player
{
// Other subclasses, and properties.
public Player()
{
// Note: I added the other instance value just for fun.
Position = new Player.int2();
velocity = new Player.float2();
}
}
2) 使用静态构造函数方法。(这些通常仅在特定的环境中使用。)
这给了我一个nullreferenceexception:Player=Player.CreatePlayer();这给了我一个nullreferenceexception:Player=Player.CreatePlayer();这给了我一个nullreferenceexception:Player=Player.CreatePlayer();这给了我一个nullreferenceexception:Player=Player.CreatePlayer();这在初始化子模块中给了我一个nullreferenceexception,在这里我试图设置player.position.X=100@克罗西:是的,如果你坚持当前的位置类型是一个类,你需要初始化新创建的玩家。然而,我建议将该位置改为结构,并使其不可变。我只试着解决你问题中的一个问题,还有一些一般性的建议。。。在你有一个可用的应用程序之前,我们不会带你浏览每一个问题。你应该试着自己解决下一个问题,如果有必要(在自己尝试之后)发布一个新问题。这在初始化子部分中给了我一个nullreferenceexception,我试图在其中设置player.position.X=100@克罗西: