小编app*_*ski的帖子

尝试让main/form1以外的类互相交互是不好的形式?

我正在尝试学习在我的代码中使用类的正确方法,当它不像一组客户,从动物继承的狗等明显的东西时.

我已经折断的大段代码为"特色",例如Installer.cs,Downloader.cs,UiManager.cs.我可以找到让这些类与彼此的属性和方法相互作用的唯一方法是使它们都是静态的,我在另一个问题中被告知是错误的方法.

所以我的问题是三件事之一:

  1. 有一种方法可以让课程互相交流,我还不明白.

  2. 类不应该试图相互交谈,而是执行一次性操作然后返回一些东西,然后main/form1主类可以使用它来传递到另一个类中进行一次性操作.

  3. 类实际上只对大量实例有用,而且我需要了解一些其他结构,以便从主类中抽象出大块的功能.

我能找到的所有教程和我观看的讲座似乎只告诉你课程是如何工作的,而不是告诉你何时以及如何在真实产品中使用它们.

编辑 - 一个更具体的例子:

假设我有一个对整个应用程序至关重要的字符串,需要每个类都可能看到和/或修改.如何在代码中移动该信息,而无需将所有内容都放在一个类中或使其静态化?

我看不到让字符串存在Form1而不使其成为静态的方法(因为所有表单事件和函数都需要能够看到它以将其传递给类).

我无法看到一种方法将字符串放入另一个类而不必使字符串和整个类静态,所以其他类可以看到它.

也许我实际上没有关于实例化类,并使对象相互交互的东西.

c# architecture class

6
推荐指数
1
解决办法
299
查看次数

竞争对手应用安装到与我相同的文件夹,无需管理员权限

首先,大家好,感谢您多次在这里寻找帮助我或教我一些东西.

我为我玩的游戏制作了一个自定义HUD,我正在使用C#中的安装程序,受到同一游戏的另一个HUD的启发.它将所有脚本文件下载并覆盖到现有目录:

C:\Program Files (x86)\Steam\steamapps\me\team fortress 2\tf
Run Code Online (Sandbox Code Playgroud)

[遗憾的是,我无法控制使用哪个文件夹,因为我正在修改Valve安装的文件]

为了删除文件夹,添加文件夹或复制文件,每次启动exe时我都必须使用应用程序清单来增加用户权限:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Run Code Online (Sandbox Code Playgroud)

不知何故,我受到启发的安装程序是安装到我所在的同一文件夹,而不强制UAC提示.

他的应用程序仅显示安全警告,但如果我取消选中"始终检查"复选框,我可以反复运行它而无需验证任何特殊权限:

http://www.trishtech.com/img_art_a/win7_publisher_not_verified_0.jpg>">

有关如何让我的应用程序更加无缝的建议吗?我已经联系了另一个应用程序的作者,他说他也在使用C#,但他不知道他正在做什么特别的工作.

编辑:我知道的一些事情我们做的不同,以防它们以某种方式产生影响:

  • 我正在使用文件浏览器来决定放置文件的位置,因此可以从任何地方运行应用程序.
    • 他只是将它们输出到与exe相同的目录,要求将exe放在目标文件夹中.
  • 我正在使用ILMerge将SharpZipLib与我的应用捆绑在一起.
    • 他只是将dll放在exe文件旁边的zip文件中.

c# permissions uac

5
推荐指数
1
解决办法
246
查看次数

将表单作为引用传递给类,但我应该从哪里调用它?

我想将表单作为引用传递给类,因此类对象可以从表单中访问公共方法.我在几个不同的地方尝试过,但每个都有一些限制.

有没有办法从事件外部实例化类,但仍然传递形式?

namespace MyApplication
{
    public partial class Form1 : Form
    {
        //If I instantiate the class here, the form seemingly doesn't exist yet 
        //and can't be passed in using "this."
        Downloader downloader = new Downloader(this);

        private void Form1_Load(object sender, EventArgs e)
        {
            //If I instantiate the class here, the form can be passed in, but the
            //class object can't be seen outside of this event.
            Downloader downloader = new Downloader(this);
        }

        private void downloadButton_Click(object sender, EventArgs e)
        {
            //If …
Run Code Online (Sandbox Code Playgroud)

c# class winforms

0
推荐指数
1
解决办法
1960
查看次数

标签 统计

c# ×3

class ×2

architecture ×1

permissions ×1

uac ×1

winforms ×1