有没有办法为实例变量创建别名(不是谈论db别名属性),而不是将其分配给另一个实例var?
例如:
@imavar
alias_attribute(@hesavar, @imavar)
Run Code Online (Sandbox Code Playgroud) 介绍
我正在用 C++ 创建一个小游戏,并想创建一个函数来重新启动游戏。
首先,我正在创建对象player。然后我有一个 if 语句来确定何时按下某个键来调用该New()方法。
我的目标
在该方法中,我想重新实例化 Player 类的对象,因此将重置所有变量。
我的代码:
Player player;
//New game method
Game::New()
{
player = new Player();
}
//Game loop
Game::Loop()
{
if(keyispressed(key))
{
Game.New();
}
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
所以这是一个嵌套列表[[1,2],[3,4]]
我想将它包装在一个名为Matrix的类型中,并使其成为Eq,Num和Show类的实例
我已经为嵌套列表(矩阵)创建了(add,sub,mul)操作.如何重载(+ - *)运算符以便+ map添加, - 映射到sub,以及*映射到mul?所以我可以做到这一点
> ma = Matrix [[1, 2], [3, 4]]
> mb = Matrix [[5, 6], [7, 8]]
> ma + mb
> ma - mb
> ma * mb
Run Code Online (Sandbox Code Playgroud)
谢谢
编辑
这是我到目前为止的尝试
> add = zipWith (zipWith (+)) > sub = zipWith (zipWith (-)) > data Matrix a = Matrix [[a]] deriving (Eq, Show) > instance Num (Matrix a) > where > (+) x y = Matrix $ add x y > (-) x y = Matrix $ sub x …
我有一个非静态类ImplementHeaderButtons,它包含一个名为的非静态公共方法Implement.类和方法的名称并不重要,重要的是它们不是静态的,所以它们需要实例化才能被使用,对吧?
所以我曾经这样做过:
var implementHeaderButtons = new ImplementHeaderButtons();
implementHeaderButtons.Implement(this, headerButtons);
Run Code Online (Sandbox Code Playgroud)
但后来我决定玩一下它(实际上我正在寻找一种方法使它成为一个单行)我得出结论,以下代码也可以正常工作:
new ImplementHeaderButtons().Implement(this, headerButtons);
Run Code Online (Sandbox Code Playgroud)
现在,我不需要一个变量来保存实例,但我的问题是:为什么我可以动态创建一个类的新实例并调用它的方法而不需要存储实例的变量?
如果它没有按预期工作,我不会感到惊讶,但确实如此.
有没有办法从实例变量访问类的静态方法/变量?我试过寻找答案,但我的搜索只找到了为什么你不能在静态方法中访问实例方法/变量.我得到为什么静态无法访问实例,但我没有得到实例无法访问静态.
这是我的情况:我是一名学生在XNA中制作一个自上而下的射击游戏,我正在尝试为每个游戏对象使用静态Texture2D.我有一个类游戏物体是奠定基础的所有其他类,与其他两大类GameBot和弹分别奠定了机器人和弹丸的基础知识.我的问题也与这种继承有关.我有GameBot和弹丸类中的所有碰撞码,和其他类,如PlayerShip/EnemyShip或炮弹/导弹从他们那里继承.
我遇到的问题是我想从一个我不知道该类的实例变量访问一个类方法/变量.我的意思是,我通过我的方法GameBot变量,但它可以是PlayerShip,EnemyShip,或GameBot的任何其他孩子,每个人都有不同的静态纹理数据.
class GameBot : GameObject
{
static protected Texture2D texture;
static internal Color[] textureData;
//etc...
internal bool DidHitEnemy(GameBot enemyGameBot)
{
//Here, I want to access enemyGameBot.textureData
//to do pixel-by-pixel collision
//but A) enemyGameBot.textureData doesn't work
//and B) enemyGameBot's class could be any child of GameBot
//so I can't just use GameBot.textureData
}
static internal virtual Color[] GetTextureData()
{
return textureData;
//I even thought about coding this function in each child
//but I can't access it anyway
}
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个类的新实例:
$obj = new $class;
Run Code Online (Sandbox Code Playgroud)
我这样做的方式是,一组通用函数会为许多类执行此操作,但现在我正在实现一些参数.现在虽然处理函数可能如下所示:
function newInst($argA = null, $argB = null, $argC = null)
Run Code Online (Sandbox Code Playgroud)
这必须预先包含所有参数并且具有上限.所以,我正在尝试做这样的事情:
function newInst() {
$obj = new $class(func_get_args());
...
}
Run Code Online (Sandbox Code Playgroud)
但我不想仅应用第一个参数,而是希望将数组应用为一组参数.我试过了
function newInst() {
$obj = new $class;
call_user_func_array(array($obj, '__construct'), func_get_args());
...
}
Run Code Online (Sandbox Code Playgroud)
但是它会调用该__construct函数两次.那么,有没有办法使用被调用函数的参数来创建一个在实例化过程中通过__constructor classname函数的新实例?
如果项目包含Form类,则表单可以通过以下方式显示:
Form1.Show
Run Code Online (Sandbox Code Playgroud)
或者是否需要首先创建表单的实例?
Dim frm As New Form1
frm.Show
Run Code Online (Sandbox Code Playgroud) 创建类的实例时,如果给出了错误的参数。我怎么办?不创建一个新实例并返回引用,而是只返回一个“无”
这是我的应用程序:因为它有时被允许。我的应用程序是从整数列表构建树。我想在列表中使用 None 来表示一片叶子。所以我只想返回一个 None 而不是一个空的树节点。
我找到了一些博客,其中提出了new在创建类的对象时避免使用关键字的建议.创建没有new关键字的对象的一些示例是-
SampleObject obj = Class.forName("com.example.SampleObject").newInstance();
Run Code Online (Sandbox Code Playgroud)
或使用clone()方法 -
SampleObject obj1 = new SampleObject();
SampleObject obj2 = obj.clone();
Run Code Online (Sandbox Code Playgroud)
然后在这里我找到了一些没有new关键字创建对象的好例子
我可以理解'Factory'模式的优点,同时避免new代码主要部分的关键字.如果我没有使用任何设计模式(用于创建对象),那么创建没有new关键字的对象有什么好处?或者没有创建对象的原因是什么new?
我有以下课程:
public class CustomerResult
{
public string CompanyStatus { get; set; }
public OverallResult Result { get; set; }
}
public class OverallResult
{
public string StatusDescription { get; set; }
public int StatusCode { get; set; }
public string CustomerId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我实例化:
var apiResult = new CustomerResult();
Run Code Online (Sandbox Code Playgroud)
为什么以下返回空引用?OverallResult当我创建时肯定会被实例化CustomerResult()?
apiResult.Result.CustomerId = "12345";
Run Code Online (Sandbox Code Playgroud)