应该是一个新手问题......
我在现有的类A中有现有的代码,我想扩展它以覆盖现有的方法A :: f().
所以现在我想创建类B来覆盖f(),因为我不想只改变A :: f(),因为其他代码依赖于它.
为此,我需要将A :: f()更改为虚拟方法.
我的问题是除了允许动态调用方法(使用B的实现而不是A)之外还有其他任何影响使方法成为虚拟的吗?我打破了某种优秀的编程习惯吗?这会影响试图使用A :: f()的任何其他代码吗?
请告诉我.
谢谢,jbu
编辑:我的问题更多的是让别人的方法虚拟有什么不对吗?即使你没有改变其他人的实现,你仍然需要进入某人的现有代码并对声明进行更改.
我当前项目中的许多类都有几个属性和方法,只能从类本身中调用.此外,他们可能会根据班级的当前状态搞乱班级的工作.
目前,所有这些接口都在.h文件的主接口声明中定义.将"私有"方法和属性放在.m文件的顶部是不错的做法?
这不会影响任何事情,因为我很可能是唯一一个看过这个源代码的人,但当然知道未来的项目会很有趣.
我想知道是否有办法在C++(或C#)中实现信号量,任何有帮助的库.我尝试使用OpenMP但我无法实际阻止线程,而是我不得不忙着等待它们,如果/当我没有足够数量的线程时会导致死锁.首先,我正在寻找一个可以让我阻止/生成/杀死我的线程的库.
其次,有没有已经实现信号量的库?
最后,当我被介绍到信号量的上下文时,我发现它非常有用(也许我错了?)但我没有看到很多库(如果有的话)实现它.我熟悉OpenMP,环顾英特尔的TBB,C#线程.但是在这些中我都没有明确地看到信号量.那些信号量不像我想的那么实用吗?还是他们难以实施?还是我不知道?
PS
信号量可以跨平台实现吗?因为它们可能与操作系统有关.
我们知道标准容器类模板deque和list可用于实现queue和+ vector来实现堆栈.但是,这两个实现之间有什么区别,如果我们总是使用相同的方法来访问,也不能使用at()或[]来访问任意元素,就像我们使用deque(vector)一样.
我有一个名为ManageAddressBook.m的文件.该文件里面有两个@implementation
第二个是什么意思?
@implementation ManageAddressBook
@end
@implementation NSString (Additions)
@end
Run Code Online (Sandbox Code Playgroud) 今天我很震惊,有比较内心的倾向Buffer.BlockCopy,Array.CopyTo. 我很好奇,看看是否在幕后Array.CopyTo被召唤Buffer.BlockCopy.这背后没有实际用途,我只想进一步了解C#语言及其实现方式.不要跳枪并指责我微观优化,但你可以指责我好奇!
当我在mscorlib.dll上运行ILdasm时,我收到了这个 Array.CopyTo
.method public hidebysig newslot virtual final
instance void CopyTo(class System.Array 'array',
int32 index) cil managed
{
// Code size 0 (0x0)
} // end of method Array::CopyTo
Run Code Online (Sandbox Code Playgroud)
这个 Buffer.BlockCopy
.method public hidebysig static void BlockCopy(class System.Array src,
int32 srcOffset,
class System.Array dst,
int32 dstOffset,
int32 count) cil managed internalcall
{
.custom instance void System.Security.SecuritySafeCriticalAttribute::.ctor() = ( 01 00 00 00 )
} // end of method Buffer::BlockCopy
Run Code Online (Sandbox Code Playgroud)
坦率地说,这令我感到困惑.我从未在我没有创建的dll/exe上运行ILdasm.这是否意味着我将无法看到这些功能是如何实现的?搜索周围只显示了一个stackoverflow问题 …
Shell示例如下.基本上,我希望客户和员工从IPerson实施SSN属性.但是,我希望客户得到并设置(这不是问题),但我希望员工只得到.
Public Interface IPerson
Property SSN As String
End Interface
Public Class Client
Implements IPerson
Public Property SSN As String Implements AELName.IPerson.SSN
Get
Return _SSN
End Get
Set(value As String)
_SSN = value
End Set
End Property
End Class
Public Class Employee
Implements IPerson
Public Readonly Property SSN As String Implements AELName.IPerson.SSN
Get
Return _SSN
End Get
End Property
End Class
Run Code Online (Sandbox Code Playgroud)
员工生成错误"'SSN'无法实现'SSN',因为接口'IPerson'上没有匹配的属性".是否有一种简单的方法来覆盖Employee的SSN实现?
首先,我不知道这个问题的最合适的标题是什么.竞争者:"如何list.append在自定义类中实现".
我class有个叫Individual.这是课程的相关部分:
from itertools import count
class Individual:
ID = count()
def __init__(self, chromosomes):
self.chromosomes = list(chromosomes)
self.id = self.ID.next()
Run Code Online (Sandbox Code Playgroud)
这是我想要用这个类做的事情:
假设我实例化了一个没有染色体的新个体:indiv = Individual([])我想稍后为这个人添加染色体.目前,我必须这样做:
indiv.chromosomes.append(makeChromosome(params))
Run Code Online (Sandbox Code Playgroud)
相反,我理想的做法是:
indiv.append(makeChromosome(params))
Run Code Online (Sandbox Code Playgroud)
具有相同的效果.
所以我的问题是这样的:当我打电话append给一个清单时,真正发生了什么?是否有被调用的__append__(或__foo__)?在我Individual班上实现这个功能会让我得到理想的行为吗?
我知道,比如,我可以实现__contains__在Individual启用if foo in indiv功能.我将如何进行启用indiv.append(…)功能?
我认为它没有.
我的理由是Haskell是纯函数式编程(没有I/O Monad),如果"名称"相同,他们可以使每个"名字调用"使用相同的评估值.
我对实现细节一无所知,但我真的很感兴趣.
详细解释将非常感谢:)
顺便说一句,我试过谷歌,很难得到任何有用的东西.
以下ABAP程序抛出错误Statement is not accessible.该程序包含一个接口和两个类:c2继承自c1.语句中抛出错误CREATE OBJECT cref1.
REPORT z_upcast_downcast_objref.
INTERFACE i1.
DATA a1 TYPE i.
ENDINTERFACE. "i1
INTERFACE i2.
INTERFACES i1.
ALIASES a1 FOR i1~a1.
DATA a2 TYPE i.
ENDINTERFACE. "i2
CLASS c1 DEFINITION.
PUBLIC SECTION.
INTERFACES i2.
ENDCLASS. "c1 DEFINITION
CLASS c2 DEFINITION INHERITING FROM c1.
PUBLIC SECTION.
METHODS m1.
ENDCLASS. "c2 DEFINITION
CLASS c2 IMPLEMENTATION.
METHOD m1.
WRITE : / 'In c2->m1 method'.
ENDMETHOD. "c2
ENDCLASS. "c2 DEFINITION
DATA: iref TYPE REF …Run Code Online (Sandbox Code Playgroud) implementation ×10
c++ ×3
c# ×2
class ×2
interface ×2
overriding ×2
abap ×1
append ×1
callbyname ×1
cocoa ×1
definition ×1
haskell ×1
il ×1
ios ×1
mscorlib ×1
objective-c ×1
performance ×1
private ×1
properties ×1
python ×1
queue ×1
sap ×1
semaphore ×1
stack ×1
stl ×1
vb.net ×1
virtual ×1