我正在开发一个具有不同组件的项目(想象一下打印机模块,成像模块等).在这个项目中,所有接口都在一个Interfaces-assembly中声明(想象一下Interfaces.dll带有接口IPrinterModule,IImagingModule等).
因为我是牛仔编码员;)我不得不问SO社区这是否是最好的做法,或者如何以更好的方式做到这一点?
在编写小函数时,我经常会遇到这样的情况,即某些参数被赋予一个函数,该函数本身只将它们传递给不同的小函数来实现其目的.
例如(C#-ish Syntax):
public void FunctionA(object param)
{
DoA(param);
DoB(param);
DoC(param);
// etc.
}
private void DoA(object param)
{
DoD(param);
}
private void DoD(object param)
{
// Error if param == null
param.DoX();
}
Run Code Online (Sandbox Code Playgroud)
因此,参数不是在被调用函数内部使用,而是在执行该作业的小函数的深处"某处".
那么什么时候最好检查我的param-Object是否为空?
签入功能A时:
Pro: - 通过使用其他方法没有任何开销,这些方法最终将无效,因为object为null.
Con: - 我的语法很棒FunctionA被丑陋的验证码弄脏了.
仅在使用param-object时进行检查:
亲: - 我的语法很精彩的功能A很高兴阅读:)
缺点: - 通过调用方法会产生开销,因为param-object为null,所以不会做任何事情. - 进一步的缺点我现在不考虑.
我正在使用以下代码来获取未绘制边框的TextBox:
public partial class CustomTextBox : TextBox
{
public CustomTextBox()
{
InitializeComponent();
SetStyle(ControlStyles.UserPaint, true);
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
int borderWidth = 1;
ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle,
Color.Transparent, borderWidth, ButtonBorderStyle.Solid,
Color.Transparent, borderWidth, ButtonBorderStyle.Solid,
Color.Transparent, borderWidth, ButtonBorderStyle.Solid,
Color.Transparent, borderWidth, ButtonBorderStyle.Solid);
}
}
Run Code Online (Sandbox Code Playgroud)
我似乎错过了OnPaint()内部的某些内容,因为我的Font不再是textBox的默认Font(也许我必须重写另一个事件)。
当检查CustomTextBox.Font属性时,它会向我显示默认的“ Microsoft SansSerif in 8,25”,但在我的textBox中键入文本时,字体肯定显得更大且加粗。
希望你能帮我!
问候,
no
[编辑]
我应该提到,如果不覆盖OnPaint,则CustomTextBox的字体是正确的。仅当覆盖OnPaint我的字体不正确时(键入文本时,字体较大且看起来为粗体)。因此,我认为我必须做一些事情才能在OnPaint内部正确初始化字体(但是ATM我不知道该怎么做)。
sombebody是否知道用于访问不同操作系统API的C++库?
我正在考虑一个访问操作系统特定功能的包装器.就像是:
osAPI.MessageBox(); //在Win32中调用MessageBox(),相当于Mac OS Linux等...
由于我认为现在很难为不同的操作系统实现这一点,因此为WinAPI提供一个不错的C++包装类也是可以的.
如果有人不想使用IDE(只是编辑器,编译器和调试器),手动阻止GUI的最佳方法是什么?
我想一下普通的C或C++中的WinAPI应用程序.
想象你有以下接口:
public interface IInterfaceA : IInterfaceX
{
//
// declarations
//
}
public interface IInterfaceB : IInterfaceX
{
//
// declarations
//
}
public interface IInterfaceC : IInterfaceX
{
//
// declarations
//
}
Run Code Online (Sandbox Code Playgroud)
现在我想用一个函数替换以下三个执行几乎相同的方法:
class SomeClass
{
IInterfaceA myVarA;
IInterfaceB myVarB;
IInterfaceC myVarC;
void SomeMethodA(IInterfaceX someVarX)
{
myVarA = (IInterfaceA)someVarX;
}
void SomeMethodB(IInterfaceX someVarX)
{
myVarB = (IInterfaceB)someVarX;
}
void SomeMethodC(IInterfaceX someVarX)
{
myVarC = (IInterfaceC)someVarX;
}
}
Run Code Online (Sandbox Code Playgroud)
我想到了类似的东西:
void SomeMethod(IInterfaceX targetVar, IInterfaceX someVarX)
{
//
// here's my …Run Code Online (Sandbox Code Playgroud) 我已经开始在Objective-C上使用Mac OS X进行编程,并决定创建一个小卡片游戏.首先,我创建一个命令行版本.如果一切正常我想实现一个GUI:没什么大的,只是一个带有可以拖放的卡片的绿色窗口.
由于我不知道如何做到这一点:我可以用什么来实现我的纸牌游戏GUI?
由于Objective-C和Cocoa在Mac OS X上看起来像一个"捆绑",是否可以使用Cocoa(以及如何)?如果没有,我还应该使用什么,或者已经存在...... 像这样?
问候,
INNO
我的问题:在应用程序内部,所有接口都在自己的dll中声明(例如,项目"接口").
在项目界面内部,也有许多类实现.
现在我需要在另一个项目中使用这个已实现的类之一并获得环依赖项,因为该项目也是项目接口中的引用.
那么,绕过这种环依赖的最佳方法是什么?这可能是应用程序设计中的一个大错误吗?
示意图:
IBigInterface.cs(一个文件中的所有内容):
interface ISomeInterfaceA
{
void SomeFunctionA(ClassB x); // ClassB from newProject.cs
void SomeFunctionB();
}
//
// etc.
//
class ClassA
{
//
// Code
//
}
Run Code Online (Sandbox Code Playgroud)
newProject.cs(一个文件中的所有内容):
class ClassB
{
//
// used in interfaces.dll
//
}
class ClassC
{
void SomeFunction(ClassA a) // ClassA from IBigInterface.cs
{
//
// do something
//
}
}
Run Code Online (Sandbox Code Playgroud)
我想到的第一件事就是...... 喜欢:
IBigInterface.cs:
interface ISomeInterfaceA
{
void SomeFunctionA(IInterfaceB x); // use interface instead of a class
void SomeFunctionB();
}
interface …Run Code Online (Sandbox Code Playgroud) c# ×4
.net ×3
c++ ×2
architecture ×1
c ×1
class-design ×1
cocoa ×1
function ×1
interface ×1
macos ×1
methods ×1
objective-c ×1
refactoring ×1
winapi ×1
winforms ×1
xcode ×1