小编And*_*ndy的帖子

C#显式运算符和继承

我确定这是一个愚蠢的问题,但为什么下面的代码不会为子类MyBool上的强制转换调用显式运算符?

public class DataType
{
    public static explicit operator bool(DataType D)
    {
        return false;
    }

    public static explicit operator DataType(bool B)
    {
        return new DataType();
    }
}

public class MyBool : DataType
{
    public bool Value;

    public MyBool()
    {
        Value = false;
    }

    public static explicit operator bool(MyBool B)
    {
        return B.Value;
    }

    public static explicit operator MyBool(bool B)
    {
        return new MyBool() { Value = B };
    }
}
Run Code Online (Sandbox Code Playgroud)

然后:

List<DataType> Types = new List<DataType>();

Types.Add(new MyBool() { Value …
Run Code Online (Sandbox Code Playgroud)

c# operator-overloading

9
推荐指数
1
解决办法
7997
查看次数

限制C#和Windows中评估软件的启动或运行时间

是否有任何好方法可以限制应用程序启动的次数或限制在Windows 7和使用C#时可以使用多长时间?

据我所知,注册表可以轻松编辑,有程序可以报告任何类型的文件访问,虚拟机可以用来将系统时间更改回安装应用程序的时间等等.对于每个想法我都能想到有一个(通常)琐碎的工作.

我想避免使用互联网连接.即我不希望软件每次使用哈希等请求启动权限.

我看到具有此类功能的第三方许可证系统.如果实施这些方法总是很蹩脚,那么他们是如何做到这一点的呢?

注意:我不想"破解"第三方系统.我已经有了自己的许可证系统,我想改进它.我正在寻找通用,合理的想法.

谢谢,安迪

.net c# windows evaluation license-key

8
推荐指数
1
解决办法
1774
查看次数

使用C#在Builder设计模式中集成序列化和反序列化

我正在实现Builder Pattern以生成一组对象.然后,必须将这些对象序列化为XML并从XML反序列化.

我知道如何执行序列化和反序列化但是我不确定如何将它集成到设计模式中.

例如,假设我的代码使用构建器来创建产品foo和bar.我的第一个想法是在每个产品上放置一个序列化函数,因为每个产品都知道要序列化的内容.

我的下一个想法是将反序列化放在Director或ConcreteBuilder中.

我不喜欢的是序列化和反序列化函数将位于不同的位置 - 一个用于声明foo和bar对象的文件,另一个用于文件中的其他内容.我担心在我处理产品类时,它们可能最终会变得彼此不同步.

我最后的想法是让Director或ConcreteBuilder执行序列化和反序列化.我不喜欢的是产品然后必须知道使用了哪个构建器或知道Director是谁.

澄清 - 有两种情况可以创建产品:

  1. 用户单击用户界面中的按钮
  2. 用户加载XML项目

c# xml design-patterns

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

Visual Studio中单个C#项目的多个可执行文件

我目前只有一个项目的单一解决方案,这将生成可执行的A.EXE.该项目包含数十个C#源文件,表单等.

我现在需要生成可执行文件B.EXE和C.EXE.B.EXE将使用大约95%的代码库用于A.EXE(即功能的子集).C.EXE将使用大约80%的B.EXE代码库(即另一个子集).

为此设置Visual Studio和我的项目/解决方案的推荐方法是什么?我正在使用2010,但我认为这可能是一个通用的Visual Studio问题.

我的担忧:

  • 使用预处理器似乎没有办法更改输出可执行文件的名称.也可能无法排除整个文件,我必须离开类接口并定义代码?

  • 为B.EXE和C.EXE创建项目并链接源文件我担心这三个项目变得不同步太容易了.假设我将一个新文件foo.cs添加到一个项目中,我可能需要记住将其添加到其他项目中并记住使用链接,以便不复制该文件.

  • 我担心将我的项目分成多个组件将使管理,调试和记住在哪里定义的内容变得困难.我担心我最终会得到十几个令人困惑的集会,而不仅仅是一小撮.

感谢您的意见和建议.我确定这是一个常见的问题.

谢谢,安迪

c# visual-studio-2010

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

C#类工厂

我有一个名为Foo的类,其功能类似于以下内容

List<Bar> LoadData();
Run Code Online (Sandbox Code Playgroud)

Foo和Bar都在我想在其他项目中重用的库中.现在我正在开发一个新项目,我想继承Bar.我们称之为NewBar.

什么是让Foo.LoadData返回NewBar列表的简单而灵活的方法?我认为工厂是需要的,或者只是一个委托功能.谁能提供一个例子?

谢谢,安迪

c# design-patterns

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

使用 C# 撤消绑定对象中的更改

在我的应用程序中,我有一个数据对象集合,它们定义应用程序在执行时收集的数据类型。

用户可以打开一个对话框窗口来编辑这些对象,并且该对话框窗口包含绑定到集合的 DataGridView 实例。这意味着用户所做的任何更改都会立即应用,这是不好的。

另一个问题是该对话框窗口有一个“取消”按钮,允许用户放弃自打开该窗口以来所做的所有更改。

目前,当窗口打开时,我会序列化所有对象(浅复制不起作用),如果用户单击“取消”,那么我会反序列化它们以恢复它们。我遇到的问题是这很混乱。它更改了所有引用,其中一些对象还存储了未序列化的数据历史记录。然后,我必须让事件通过应用程序传递出去,以通知对象更新其引用等。这很痛苦。

有没有更好的方法来解决这个问题?

c# design-patterns reference

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

为 IronPython 实现“智能感知”

在我的 C# 应用程序中,我有一个文本编辑器,允许用户输入 IronPython 脚本。我已经实现了一组可用于 python 环境的 C# 类。

我现在想实现一个“智能感知”类型的系统,用户输入一个变量名,然后输入一个点,它会提示用户输入可用方法和属性的列表。

例如,这是一个 IronPython 脚本:

foo = MyClass()
foo.
Run Code Online (Sandbox Code Playgroud)

此时光标就位于点之后。C# 中的 MyClass 示例:

public class MyClass {
    public void Func1() ...
    public void Func2() ...
}
Run Code Online (Sandbox Code Playgroud)

现在我想给用户一个弹出列表,显示 Func1()、Func2() 等。

我需要做的是获取变量名“foo”并获取类 MyClass。

请注意,我无法执行 IronPython 代码来执行此操作,因为它在用户界面中执行操作。

这就是我所能达到的程度:

ScriptSource Source = engine.CreateScriptSourceFromString(pycode, SourceCodeKind.File);

SourceUnit su = HostingHelpers.GetSourceUnit(Source);
Microsoft.Scripting.Runtime.CompilerContext Ctxt = new Microsoft.Scripting.Runtime.CompilerContext(su, new IronPython.Compiler.PythonCompilerOptions(), ErrorSink.Null);
IronPython.Compiler.Parser Parser = IronPython.Compiler.Parser.CreateParser(Ctxt, new IronPython.PythonOptions());

IronPython.Compiler.Ast.PythonAst ast = Parser.ParseFile(false);

if (ast.Body is IronPython.Compiler.Ast.SuiteStatement)
{
    IronPython.Compiler.Ast.SuiteStatement ss = ast.Body as …
Run Code Online (Sandbox Code Playgroud)

c# ironpython code-completion

5
推荐指数
0
解决办法
283
查看次数

将 github 个人访问令牌与 TortoiseSVN 结合使用

Github 下个月将关闭密码访问,因此我生成了个人访问令牌 (PAT)。

然后,我尝试使用以下 URL 查看现有存储库的新副本:

https://me:ghp_blahblahblah@github.com/me/myrepo.git

其中 ghp_blahblahblah 是我的 PAT。我收到以下错误:

Subversion 遇到了严重的问题。...在文件 'D:\Development\SVN\Releases\TortoiseSVN-1.14.1\ext\subversion\subversion\libsvn_client\util.c' 第 96 行:断言失败 (svn_uri__is_ancestor(pathrev->repos_root_url, url))

我正在运行最新版本的 TortoiseSVN 1.14.1。

我是不是少了一步?有没有另一种方法可以使这项工作无需求助于 SSH 密钥(我不想这样做)?

谢谢!

svn git passwords tortoisesvn personal-access-token

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