标签: overloading

你应该在C#4.0中使用重载或可选参数声明方法吗?

我正在观看Anders关于C#4.0的讨论和C#5.0的预览,它让我想到C#中何时可以提供可选参数什么是推荐的方法来声明不需要指定所有参数的方法?

例如,FileStream类这样的东西有大约十五种不同的构造函数,它们可以分为逻辑"族",例如下面的字符串,来自a的那些IntPtr和来自a的那些SafeFileHandle.

FileStream(string,FileMode);
FileStream(string,FileMode,FileAccess);
FileStream(string,FileMode,FileAccess,FileShare);
FileStream(string,FileMode,FileAccess,FileShare,int);
FileStream(string,FileMode,FileAccess,FileShare,int,bool);
Run Code Online (Sandbox Code Playgroud)

在我看来,这种类型的模式可以通过改为使用三个构造函数来简化,并使用可以默认的参数的可选参数,这将使构造函数的不同系列更加清晰[注意:我知道这个更改不会是在BCL制作,我正在假设这种情况].

你怎么看?从C#4.0开始,将具有可选参数的紧密相关的构造函数和方法组作为单一方法更有意义,还是有充分理由坚持使用传统的多重载荷机制?

c# overloading optional-parameters c#-4.0

91
推荐指数
6
解决办法
2万
查看次数

为什么最负的int值会导致有关模糊函数重载的错误?

我正在学习C++中的函数重载,并遇到了这个问题:

void display(int a)
{
    cout << "int" << endl;
}

void display(unsigned a)
{
    cout << "unsigned" << endl;
}

int main()
{
    int i = -2147483648;
    cout << i << endl; //will display -2147483648
    display(-2147483648);
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,该int范围内给出的任何值(在我的情况下int是4个字节)都将调用,display(int)并且该范围之外的任何值都将是不明确的(因为编译器无法决定调用哪个函数).int除了最小值之外,它对整个值范围有效,即-2147483648编译因错误而失败

超载的召唤display(long int)是模棱两可的

但是将相同的值与a int打印并给出值2147483648.我对这种行为感到困惑.

为什么只有在传递最负数时才会观察到这种行为?(该行为是相同的,如果一个short使用具有-32768-事实上,在负数和正数具有相同的二进制表示任何情况下)

使用的编译器:g ++(GCC)4.8.5

c++ integer overloading negative-number ambiguous-call

88
推荐指数
2
解决办法
4553
查看次数

使用+解决lambda的函数指针和std :: function上的模糊重载

在下面的代码中,第一次调用foo是不明确的,因此无法编译.

第二个,+在lambda之前添加,解析为函数指针重载.

#include <functional>

void foo(std::function<void()> f) { f(); }
void foo(void (*f)()) { f(); }

int main ()
{
    foo(  [](){} ); // ambiguous
    foo( +[](){} ); // not ambiguous (calls the function pointer overload)
}
Run Code Online (Sandbox Code Playgroud)

+这里的符号是什么?

lambda overloading c++11

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

是否可以覆盖非虚方法?

有没有办法覆盖非虚方法?或者给出类似结果的东西(除了创建一个新的方法来调用所需的方法)?

我想从Microsoft.Xna.Framework.Graphics.GraphicsDevice单元测试中覆盖一个方法.

c# overriding overloading

83
推荐指数
4
解决办法
7万
查看次数

python中重载的函数?

是否有可能在Python中重载函数?在C#中,我会做类似的事情

void myfunction (int first, string second)
{
//some code
}
void myfunction (int first, string second , float third)
{
//some different code
}
Run Code Online (Sandbox Code Playgroud)

然后当我调用函数时,它会根据参数的数量区分两者.是否有可能在Python中做类似的事情?

python arguments overloading function

83
推荐指数
3
解决办法
9万
查看次数

如果在派生类中覆盖此属性,如何调用基类的属性?

我正在改变我的一些类别,从广泛使用吸气剂和制定者到更加诡计多端的财产使用.

但现在我被卡住了,因为我之前的一些getter或setter会调用基类的相应方法,然后执行其他操作.但是如何通过属性实现这一目标呢?如何在父类中调用属性getter或setter?

当然,只调用属性本身就会产生无限递归.

class Foo(object):

    @property
    def bar(self):
        return 5

    @bar.setter
    def bar(self, a):
        print a

class FooBar(Foo):

    @property
    def bar(self):
        # return the same value
        # as in the base class
        return self.bar # --> recursion!

    @bar.setter
    def bar(self, c):
        # perform the same action
        # as in the base class
        self.bar = c    # --> recursion!
        # then do something else
        print 'something else'

fb = FooBar()
fb.bar = 7
Run Code Online (Sandbox Code Playgroud)

python inheritance overloading properties descriptor

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

如果我不在Javascript函数中传递参数会发生什么?

我是新来的Javascript的世界里,有写非常基本的功能,修补和在下面的例子中被偶然事故,我不能确定为什么它的时候我不传递参数时,功能需求它的工作原理.

样本功能

function myfunction(x) {
    alert("This is a sample alert");
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我调用该函数,myfunction();我将收到警报.为什么我没有传递参数时能够在没有任何错误或警告的情况下调用该函数?

编辑

我没想到这么多伟大的答案,我绝不在一个位置,但能说哪个答案是最好的所以我只能对请求人提出最好的答案,我会奖励接受该人.

javascript overloading

76
推荐指数
4
解决办法
5万
查看次数


按返回类型重载

我在这里读到了几个关于这个主题的问题,这个问题似乎让我感到困惑.我刚刚开始学习C++,我还没有学过模板或运算符重载等等.

现在有一种简单的重载方式

class My {
public:
    int get(int);
    char get(int);
}
Run Code Online (Sandbox Code Playgroud)

没有模板或奇怪的行为?或者我应该

class My {
public:
    int get_int(int);
    char get_char(int);
}
Run Code Online (Sandbox Code Playgroud)

c++ overloading

74
推荐指数
6
解决办法
7万
查看次数

如何将"重新导入"模块转换为python,然后在导入后更改代码

我有一个 foo.py

def foo():
    print "test"
Run Code Online (Sandbox Code Playgroud)

在IPython中我使用:

In [6]:  import foo
In [7]:  foo.foo()
test
Run Code Online (Sandbox Code Playgroud)

然后我改为foo():

def foo():
    print "test changed"
Run Code Online (Sandbox Code Playgroud)

在IPython中,调用的结果仍然是test:

In [10]:  import foo
In [11]:  foo.foo()
test
Run Code Online (Sandbox Code Playgroud)

然后我用:

In [15]: del foo
In [16]:  import foo
In [17]:  foo.foo()
test
Run Code Online (Sandbox Code Playgroud)

我删除了foo.pyc相同的文件夹foo.py存在,但仍然没有运气.

我可以知道如何在运行时重新导入更新的代码吗?

python overloading runtime ipython python-import

73
推荐指数
4
解决办法
5万
查看次数