通过变量名声明一个新对象

Posted

技术标签:

【中文标题】通过变量名声明一个新对象【英文标题】:Declaring a new object via variable name 【发布时间】:2013-10-17 05:34:07 【问题描述】:

我对 C#(和一般编程)还很陌生,所以如果我犯了任何重大错误或完全牛市,请坚持我。 所以我想要做的是有一个私人空白来调整按钮的背景图像的大小。我通过字符串将按钮的名称发送到私有 void。无论如何,代码看起来像这样:

ButtonResize("Zwaard");


protected void ButtonResize(string Button)
    
        string ButNaam = "btn" + Button;
        Button Butnaam = new Button();
        Butnaam.Text = ButNaam;

        if (Butnaam.BackgroundImage == null)
        
            return;
        
        else
        
            var bm = new Bitmap(Butnaam.BackgroundImage, new Size(Butnaam.Width, Butnaam.Height));
            Butnaam.BackgroundImage = bm;
        
     

但它不是那样工作的。我似乎找不到一种方法来声明一个名为我在字符串中的值的新对象。我希望我的代码做的不是创建一个名为“Butnaam”的按钮,而是创建一个名为 btnZwaard(字符串 Butnaam 的值)的按钮。

如何告诉 C# 我希望变量的值是新按钮的名称,而不是我输入的字面意思?

提前致谢。

【问题讨论】:

可能有一些方法可以使用反射来做类似的事情,但不要这样做。这是个坏主意。创建将名称映射到对象的单个 Dictionary 对象,并将动态创建的名称用作字典键,而不是用作变量名称。 您真的要每次都创建一个新按钮吗?如果它有效,这就是你当前的代码会做的事情。 嗯,实际上没有,但我似乎无法从受保护的 void 访问所需按钮的属性,所以我想我只需要创建一个名称相同的对象,访问它的属性和它也会改变我原来的按钮......如果你明白我的意思。不过,我可能只是想多了。我想要那段代码实际上是更改所需按钮(我发送名称)的背景图像的大小 @Glenn: "so I figured I just had to create an object named the same, acces it's properties and it would change for my original button as well" - .... 不完全是。如果需要修改现有对象,则需要对该对象的引用。 【参考方案1】:

字符串是一段文本。您随后将其称为class,这是错误的。假设它是正确的,您创建一个新按钮而不是“调整其图像大小”。

您想要开始做的是在与具有按钮的对话框相同的类中创建一个新函数。该函数可以调整控件的图像大小。

编辑:顺便说一句,这似乎不是学习语言的好起点。请找到一个很好的 C# 在线教程(例如,一个 hello world 应用程序)。

【讨论】:

感谢您的回答。你是对的,这可能不是一个好的起点。现在我只是随便尝试拼凑某种游戏。得到 C# 的绳索,但也有一些乐趣。问题是当我有什么想法时,我必须让它发生,这有时会导致我获得很多更难的材料。不过我确实学得很快,以后添加上下文时我可以理解上下文之外的东西:) 对你有好处;你必须保持有趣。它似乎你没有掌握类和对象的基础知识(面向对象的编程),深层次的“不会帮助你”。查一下! 你完全正确。起初我什至不知道课程。当我的一个朋友建议我改用类时,我正试图编写一些非常复杂的东西。它使项目变得容易了 4 倍。所以,是的,我可能应该做一些一般性的阅读来掌握基础知识。但是,每当我读到一些东西时,几行之后我就会感觉到“是的,我理解这一点,我想实现这一点”。关闭指南或其他任何东西,然后开始在 VS 中乱搞。确实是个很坏的习惯。 这可能意味着您将成为一名优秀的软件工程师,因为您具有只想让事情顺利进行并完成工作的特质。出于完全相同的原因,我需要很大的自制力才能学习新事物。祝你好运!【参考方案2】:

您正在寻找这样的东西吗?通过将Button 传递给方法,您就可以对对象进行操作。如果这是您正在寻找的内容,那么您应该阅读Passing Reference-Type Parameters

protected void ButtonResize(Button button)
    
        if (button != null && button.BackgroundImage != null)
        
            button.BackgroundImage = new Bitmap(button.BackgroundImage, new Size(newWidth, newHeight));
        
     

【讨论】:

是的,就是这样!只要看到答案,它实际上看起来很合乎逻辑,你必须这样做......愚蠢的我:p谢谢你:) @Glenn 不要忘记将我标记为答案。很高兴我能帮上忙。

以上是关于通过变量名声明一个新对象的主要内容,如果未能解决你的问题,请参考以下文章

Java类和对象

PHP 打开PHP5对象,无需先声明变量名

[JavaScript]解构赋值详解

java基础-- 类对象

打开PHP5对象,不需要先声明变量名

C语言变量的定义和声明有啥不同?