小编sta*_*lus的帖子

是否有一个孩子实施了一个界面而另一个没有违反Liskov替换原则?

我最近一直在考虑Liskov替换原则以及它与我当前任务的关系.我有一个包含菜单的主表单; 在这个主要表单中,我将一个特定的表单作为MDI子对接.此特定表单可能包含也可能不包含菜单.如果是,我想将它与主菜单合并.所以情况是这样的:

public class MainForm
{
    public void Dock(SpecificBaseForm childForm)
    {
        this.Dock(childForm);
        if (childForm is IHaveMenu)
        {
            this.Menu.Merge(childForm as IHaveMenu).Menu;
        }
    }
 }

public interface IHaveMenu
{
   Menu Menu {get;}
}

public abstract class SpecificBaseForm{}

public class SpecificFormFoo : SpecificBaseForm {}

public class SpecificFormBar: SpecificBaseForm,IHaveMenu
{
    public Menu Menu{get {return this.Menu;}}
}
Run Code Online (Sandbox Code Playgroud)

现在这两个孩子并不是"完全"可互换的:一个有菜单; 另一个没有.这是在C#中误用is/as contruct吗?如果这不正确,那么干净的解决方案是什么?

c# design-patterns single-responsibility-principle design-principles solid-principles

7
推荐指数
1
解决办法
165
查看次数

尝试使用API​​控制器返回视图时出现问题

我正在实现REST Web API.我使用Adam Freeman的Pro ASP.NET MVC5中的示例作为起点,但将其调整为Web API的方式.

以下是我的代码:

public class AdminController : ApiController
{        
    private IUserRepository _repository;
    public AdminController(IUserRepository repository) 
    {
        _repository = repository; 
    }

    public ActionResult Index()
    {
        return View(_repository.Users);
    }
}
Run Code Online (Sandbox Code Playgroud)

在本书中,没有AdminController实现,但如果我这样做,那么我会得到关于没有无参数构造函数的错误.我需要构造函数来获取参数,以便我可以注入依赖项.所以这就是我改变的原因,但现在却无法识别.ControllerApiControllerApiControllerView

我需要做什么来代替使用View一个ApiController

我确实找到了这个问题,但答案基本上是"你不需要在这里使用ApiController,只需使用Controller",这样就没有帮助我.

c# asp.net controller

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

C中的int foo(int argc,...)vs int foo()vs int foo(void)

所以今天我认为(int foo()事实上第一次)实际上不同于int foo(void)第一个允许任意数量的输入而第二个允许.

是否int foo()只是忽略任何给定的输入?如果是这样,那么允许这种形式的功能有什么意义呢?如果没有,你怎么能访问它们,这与变量参数列表(例如类似的东西int foo (int argc, ...))有何不同?

c arguments argument-passing

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

在无限循环性能中声明变量类型?

那么根据Stack Overflow的一些问题答案,我已经读到了在循环中使用对象声明,比在它之外做它更好,性能方面.

我无法理解为什么,因为当我在循环中使用声明时,我的软件使用更多的RAM,然后是循环外的声明.

while (true) {
    String hey = "Hello.";
}
Run Code Online (Sandbox Code Playgroud)

拉姆使用量:1820kb

String hey;
while (true) {
    hey = "Hello.";
}
Run Code Online (Sandbox Code Playgroud)

拉姆使用量:1720kb

为什么人们说我应该使用第一个循环导致它的性能更好,但是它从RAM中使用了100kb?

c# performance scope

5
推荐指数
2
解决办法
480
查看次数

在C ++中获取文件或文件夹的创建日期

我想编写一个程序来获取我创建的文件和文件夹的详细信息,包括创建日期,如下所示:2006年2月15日我该怎么办?有什么建议吗?我不得不提到,我不允许使用windows.h。

c++ file

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

什么是Java BE?

什么是Java BE?我在文章中已经看过几次了。但是我找不到信息。它是新型的JDK吗?还是仅仅是错字?谢谢。

java

2
推荐指数
1
解决办法
1928
查看次数

我正在通过访问内存位置来更改const变量的值.为什么不起作用?

我试图理解c ++中的const.我在下面的代码片段中写了这个:

const int x=5;
int *ptr;
ptr=(int*)&x;
cout<<"address of x="<<&x<<endl;
cout<<"value of ptr="<<ptr<<endl;
*ptr=11;
cout<<"*ptr="<<*ptr<<endl;
cout<<"x="<<x;
Run Code Online (Sandbox Code Playgroud)

输出是

address of x=0x28fef8
address of ptr=0x28fef8
*ptr=11
x=5
Run Code Online (Sandbox Code Playgroud)

由于ptr指向x,我确信*ptr和x的值是相同的.为什么价值不同?我知道x是const,但是,我通过执行*ptr来改变内存地址的值.请告诉我我错过了什么.

c++ const

2
推荐指数
1
解决办法
109
查看次数

在64位二进制文​​件上,超过2gb的分配失败

在一台64位的linux机器上,我编写了以下小型C程序:

#include <stdlib.h>
#include <stdio.h>

int main (void)
{
    #define BLOCK_SIZE (1024*1024)
    int i;

    for (i = 1; ; i++)
    {
        char *p = (char *)malloc(i * BLOCK_SIZE);
        if (p == 0)
            break;
        *p = 13;
        free(p);
    }

    printf ("Allocated max %d MB\n", (i - 1));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我编译它-O0 -m64,我可以在我的桌面系统上分配2047 MB​​.如果我使用-O0 -m323829 MB 编译相同的程序.

为什么32位二进制文​​件的最大malloc大小比同一台机器上的64位二进制文​​件大?

编辑:如果我激活优化器-O3,64位机器上的最大内存量为20588.

c linux malloc memory-management

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

获取java.lang.IllegalArgumentException:比较方法违反了其一般合同!一种算法,应该100%稳定

不知道这怎么会变得不稳定.这在大多数情况下都可以正常工作,但是会抛出IllegalArgumentException和一些查询.

这就是全部,想不出更多相关细节.

private static void sortSearchResults(List<Map> l){
        Comparator<Map> comp = new Comparator<Map>(){
            public int compare(Map a,Map b){
                int aa=0,ba=0,as=0,bs=0;
                try{
                    aa = Integer.parseInt(""+a.get("activity"));

                }catch(Exception ex){
                }
                try{
                    ba = Integer.parseInt(""+b.get("activity"));
                }catch(Exception ex){
                }
                try{
                    as = Integer.parseInt(""+a.get("searchscore"));

                }catch(Exception ex){
                }
                try{
                    bs = Integer.parseInt(""+b.get("searchscore"));
                }catch(Exception ex){
                }


                if(as>bs)
                    return -1;
                else if(bs<as)
                    return 1;
                else{
                    if(aa>ba)
                        return -1;
                    else if(aa<ba)
                        return 1;
                    else
                        return 0;
                }

            }
            public boolean equals(Object o){
                return o==this;
            }
        };
        Collections.sort(l,comp);
    }
Run Code Online (Sandbox Code Playgroud)

java exception comparator illegalargumentexception

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

使用PYTHON中的列表的斐波那契序列?

我有一个关于将斐波那契序列列入清单的问题,我只是陌生人,请有人帮助我.

这是我的代码.我知道这看起来有点不对劲,因为它说的语法无效.我真的不知道该怎么办:(

此代码适用于普通代码而不使用列表!

myArray1 = [0] 
myArray2 = [1]

while myArray2 < 700:
    myArray1, myArray2 = b[i], myArray1+myArray2[i]
    print(myArray2)
Run Code Online (Sandbox Code Playgroud)

python list fibonacci

0
推荐指数
2
解决办法
3万
查看次数