小编gre*_*man的帖子

是否可以拦截对不存在函数的调用?

PHP 有其神奇的方法__call__callStatic可以拦截对不存在方法的调用。我正在寻找一种方法来拦截对不存在函数(位于命名空间而不是类型内的函数)的调用。

可以吗(PHP7)?

有一段时间我考虑过将函数放在代理类中,但是名称空间可以跨越多个文件,如果我没有记错的话,PHP没有分部类,因此这种方法没有用。

更新:每个命名空间有多个文件问题。

假设我有文件 A.php 和 B.php,它们都具有相同的命名空间,例如Text。考虑将所有函数放入代理类中。现在我有文件 C.php 并且我有 call Text\indexOf(...)。但是我不知道这是否是Text\proxyA::indexOf因为Text\proxyB::indexOf我拥有的所有信息都是命名空间的名称 -- Text-- 和函数名称。所以从呼叫者的角度来说,我很高兴。

php

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

如何从文件夹运行已发布的 Blazor Web 客户端?

这个问题可能被视为我上一个问题的后续问题:How to run generated blazor web client from command line?

我已经正确编写了 Blazor Web 客户端(仅包含单个项目的解决方案),我可以从 Visual Studio 或命令行运行它。

现在我将项目发布到该文件夹​​,我想从该文件夹运行它——问题是所有内容都放在“wwwroot/_framework”子文件夹中,我没有看到运行所有这些东西所需的服务器代码。

那么我如何让VS也发布所需的服务器呢?

简而言之,我想获取所需的所有文件,因此我可以输入“dotnet myapp.dll”或类似的内容,服务器将从我的 blazor 应用程序启动。当我从 VS 运行它时会发生什么。

publish blazor blazor-webassembly

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

如何放弃对所有linq表所做的更改?

我想放弃对linq表所做的所有更改(这意味着 - 我使用linq,数据在客户端更改,服务器上的数据完好无损).这该怎么做?

编辑:问题部分解决

http://graemehill.ca/discard-changes-in-linq-to-sql-datacontext/

只要您不使用事务,它就可以工作.当你这样做并且使用混合"模式"作为记录时,存在一个问题:

begin trans
insert a record
update inserted record
commit trans
Run Code Online (Sandbox Code Playgroud)

当您更新上面的记录时,Linq将其计为更新记录,如果出现异常,您有两个操作 - 事务将被回滚,Linq端的数据将被丢弃.在丢弃更改时,Linq尝试从数据库中获取它(丢弃更新意味着为记录重新获取数据),但由于所有更改都已回滚,因此没有更新记录.

这个问题

如何以智能通用方式改进DiscardChanges方法以处理事务.或者如何更改事务/ discard-submitchanges的工作流程以使所有这些工作一起工作?

那些不是聪明的解决方案:

  1. 重新获取所有数据
  2. 重新建立与DB的连接(因为它导致(1))

c# linq database datacontext

4
推荐指数
1
解决办法
2899
查看次数

如何获得房产的吸气剂?

我想得到一个属性的getter,所以我可以传递给一个需要Func的方法.现在我将getter提取到Get方法,并在需要getter函数时使用此方法.

关于背景的几句话:我有A类属性,我有另一个类T,它跟踪A(以及B类,C类等)的一些属性.保持跟踪意味着当T的对象被询问有关被跟踪属性的当前值时,它应该给出这样的信息.

一种方法可能是变更通知机制,但A类不知道跟踪的是什么 - 所以这是非常错误的方法.您必须重写可能被跟踪的所有类.此外,通知必须始终发送,即使跟踪器根本不会被问及值.

简单地传递方法如何读取值(属性的getter)似乎更方便,并且跟踪器将在需要时使用它.没有开销,非常简单.

c# properties

4
推荐指数
2
解决办法
2636
查看次数

如何根据单元格背景色更改WPF DataGrid单元格小部件背景色?

背景

我使用VS2010,DataGrid(WPF附带的那个),并手动创建行和列。根据行的状态,我为行设置了各种颜色(但为简单起见,假设它是黄色)。之所以起作用,是因为datagrid使用标签来显示文本,并且当我为行设置背景时,它也反映在标签小部件中。

但是,我无法ctrl + c(复制)单元格的内容,因此现在我为列创建自定义模板,并使用文本框显示数据。

问题

Texbox会阻止单元格的背景,所以实际上,我得到了(例如)带有带有黄色边框的白色单元格(文本框)的数据网格。

问题

如何使文本框(我的情况)知道单元格的背景色?我尝试使用技巧并为所有文本框设置透明笔刷,但是单元格(文本框)中仍然出现白色背景。

当前代码:

        grid.BeginInit();
        grid.Columns.Clear();


        int i = 0;

        var glass_brush = new SolidColorBrush(Color.FromArgb(255,0,0,0));

        foreach (var db_col in query.FieldNames)
        {
            var template = new DataTemplate();
            var elemFactory = new FrameworkElementFactory(typeof(TextBox));
            elemFactory.SetBinding(TextBox.TextProperty, new Binding(String.Format("Visual[{0}]", i)));
            // make the background transparent -- it does not work though
            elemFactory.SetValue(TextBlock.BackgroundProperty,glass_brush);
            template.VisualTree = elemFactory;

            var col = new DataGridTemplateColumn();
            col.CellTemplate = template;
            col.IsReadOnly = true;
            col.Header = db_col;
            grid.Columns.Add(col);
            ++i;
        }

        {
            grid.Items.Clear();


            foreach (var db_row in diffs) …
Run Code Online (Sandbox Code Playgroud)

c# wpf datagrid templates

4
推荐指数
1
解决办法
2658
查看次数

为什么在C#中禁止为发件人发送事件?

引自:http: //msdn.microsoft.com/en-us/library/aa645739(VS.71).aspx

"调用事件只能在声明事件的类中完成."

我很困惑为什么会有这样的限制.如果没有这个限制,我将能够编写一个类(一个类),这个类一次用于管理发送给定类别的事件 - 比如INotifyPropertyChanged.

有了这个限制,我必须重新复制并粘贴相同(相同!)的代码.我知道C#的设计者不重视代码重用太多(*),但是gee ...复制和粘贴.这有多高效?

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string name)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    }
Run Code Online (Sandbox Code Playgroud)

在每个班级改变一些事物,到你生命的尽头.害怕!

所以,虽然我正在恢复我的额外发送课程(我太容易上当了),以旧的,"好"的复制和粘贴方式,你能看到吗?

能够为发件人发送事件会发生什么可怕的事情?

如果你知道如何避免这种限制的任何技巧 - 也不要犹豫回答!

(*)具有多重继承我可以更好地编写通用发送方,但是C#没有多重继承

编辑

到目前为止最好的解决方法

介绍界面

public interface INotifierPropertyChanged : INotifyPropertyChanged
{
    void OnPropertyChanged(string property_name);
}
Run Code Online (Sandbox Code Playgroud)

为PropertyChangedEventHandler添加新的扩展方法Raise.然后为此新接口添加mediator类,而不是基本的INotifyPropertyChanged.

到目前为止,它是最小的代码,让我们代表它的所有者从嵌套对象发送消息(当所有者需要这样的逻辑时).

谢谢大家的帮助和想法.

编辑1

Guffa写道:

"通过从外部触发事件,你无法做出任何事情,"

这很有意思,因为......我可以.这正是我要问的原因.看一看.

假设你有类字符串.不好意思吧?但是让我们用Invoker类打包它,它每次发生变化时都会发送事件.

现在:

class MyClass : INotifyPropertyChanged
{
    public SuperString text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在,当文本被更改时,MyClass被更改.因此,当我在文本内部时,我知道,如果我只拥有所有者,那么它也会被更改.所以我可以代表它发送活动.它在语义上是100%正确的.

备注:我的课程稍微聪明一点 - 所有者设置是否有这样的逻辑.

编辑2

传递事件处理程序的想法 - …

c# events

4
推荐指数
1
解决办法
482
查看次数

禁止通过对象访问类的静态元素的设计原因是什么?

我不能强调这一点 - 设计原因.

在C++中,您可以使用类(类型)引用或对象(实例)引用获取静态元素.在C#中只有类型引用.我在C#中写的越多,它引起的问题就越多 - 只有片刻(一次又一次)我所拥有的只是对象,并且为了通过创建来避免缺少类型(因此访问静态元素)的问题常规元素,它将值来回传递给静态元素.

可以说,在一个类中创建常规(非静态)元素作为静态元素的代理是很小的代价,但我不知道我实际支付的是什么.对我来说,负担是显而易见的,不是关键的,而是烦人的,那么有什么好处呢?

有什么设计原因,在C#中你不能引用对象的静态元素(当然是从外部)?

代码示例

public class Foo
{
   public static readonly string Name = "name";
}

...

Foo foo = new Foo();
Run Code Online (Sandbox Code Playgroud)

现在考虑"Foo.Name"对"foo.Name";

真实案例

对我来说,最常用的类之一是用于枚举的关联数组(我的自定义类) - AssocEnum.它就像词典,但所有键都是预填充的.最重要的是,我有像EnumBit(这是AssocEnum)和EnumNames(它是AssocEnum)这样的类.与Dictionary不同,每个给定枚举的实例都具有相同的Keys属性.这意味着你可以获得AssocEnum类型的密钥及其实例.

困扰我的是我必须引入两个属性TypeKeys(用于类)和Keys(例如 - 它只是TypeKeys的代理),因为我无法调用静态TypeKeys作为AssocEnum的例子.

c# oop static

4
推荐指数
1
解决办法
163
查看次数

如何使用GlassFish自动部署war文件 - 来自David Geary,Cay S. Horstmann的"Core JavaServerFaces"

天真的问题,但这是我迈向JSF的第一步,所以请原谅我;-)

我正在遵循David Geary,Cay S. Horstmann(第3版)的"Core JavaServerFaces"中的第一个示例的所有步骤.

什么有效:

  • java的作品
  • 玻璃鱼工作
  • 我可以编译附加的代码
  • 我可以创建.war文件

当我将war文件复制到GlassFish的autodeploy子目录并尝试在GF中显示相应的页面时,问题就开始了.作为回报,我得到404错误,在日志中我发现:

选择文件/opt/glassfish3/glassfish/domains/domain1/autodeploy/login.war进行自动部署.

模块/ opt/glassfish3/glassfish/domains/domain1/applications/login无法识别模块类型

没有安装的容器能够处理此应用程序登录

自动部署失败:/opt/glassfish3/glassfish/domains/domain1/autodeploy/login.war.

glassfish 3.1.2,java 1.6.0_29,opensuse 11.4.

问题是如何使这个代码工作?

更新

jar tvf login.war

     0 Thu Apr 12 22:24:24 CEST 2012 META-INF/
    71 Thu Apr 12 22:24:24 CEST 2012 META-INF/MANIFEST.MF
     0 Mon Jun 27 10:13:54 CEST 2011 src/
     0 Mon Jun 27 10:13:54 CEST 2011 src/java/
     0 Mon Jun 27 10:13:54 CEST 2011 src/java/com/
     0 Thu Apr 12 22:16:32 CEST 2012 src/java/com/corejsf/
   603 Thu Apr 12 22:16:32 …
Run Code Online (Sandbox Code Playgroud)

java jsf glassfish autodeploy

4
推荐指数
1
解决办法
7550
查看次数

如何为宏符号添加前缀?

我正在寻找标题中所述问题的一般解决方案.但是,插图考虑我的真实情况.我想得到wstring,像这样:

L"hello"
Run Code Online (Sandbox Code Playgroud)

但是当我有一个宏:

#define MACRO(S) ...
Run Code Online (Sandbox Code Playgroud)

并致电:

MACRO("hello") // no L prefix
Run Code Online (Sandbox Code Playgroud)

如何定义它wstring,像以前一样?

L S
Run Code Online (Sandbox Code Playgroud)

被视为2个符号.

c++ macros c-preprocessor

4
推荐指数
2
解决办法
4084
查看次数

如何使用字符范围实现正则表达式 NFA?

当您阅读诸如Regex: NFA 和 Thompson's algorithm 之类的帖子时,一切看起来都相当简单,直到您意识到在现实生活中您不仅需要像“7”或“b”这样的直接字符,而且还需要:

[A-Z]
[^_]
.
Run Code Online (Sandbox Code Playgroud)

即字符类(或范围)。因此我的问题是——如何使用字符范围构建 NFA?使用像“not A”、“anything else”这样的元字符然后计算重叠范围?这将导致在使用最终自动机时使用树状结构,而不仅仅是表格。

更新:请假设大小不平凡 (>>256) 字母表。

我问的是 NFA,但后来我也想将 NFA 转换为 DFA。

regex dfa nfa

4
推荐指数
1
解决办法
1591
查看次数