最近我的一位朋友问我如何在C++中阻止类继承.他希望编译失败.
我在考虑它并找到了3个答案.不确定哪个是最好的.
1)私人建设者
class CBase
{
public:
static CBase* CreateInstance()
{
CBase* b1 = new CBase();
return b1;
}
private:
CBase() { }
CBase(CBase3) { }
CBase& operator=(CBase&) { }
};
Run Code Online (Sandbox Code Playgroud)
2)使用CSealed基类,私有ctor和虚拟继承
class CSealed
{
private:
CSealed() {
}
friend class CBase;
};
class CBase : virtual CSealed
{
public:
CBase() {
}
};
Run Code Online (Sandbox Code Playgroud)
3)使用CSealed基类,受保护的ctor和虚拟继承
class CSealed
{
protected:
CSealed() {
}
};
class CBase : virtual CSealed
{
public:
CBase() {
}
};
Run Code Online (Sandbox Code Playgroud)
以上所有方法都确保不能继承CBase类.我的问题是:
1)哪种方法最好?还有其他方法吗?
2)除非CSealed类是虚拟继承的,否则方法2和3将不起作用.这是为什么 ?它与vdisp ptr有什么关系吗?
PS: …
Windows Forms的CheckBox控件实现了两者CheckedChanged和CheckStateChanged事件.据我所知,当复选框的选中状态发生变化时,两者都会触发.
CheckedChanged先于CheckStateChanged,但除此之外,我认为没有区别.我错过了什么吗?应该优先于另一个吗?
这可能是WPF认知的明智之举,但我想知道是否有一种简单的方法将文本放在WPF ProgressBar上.对我来说,空的进度条看起来很赤裸.这是屏幕房地产可能携带有关消息什么是进步,甚至只是添加数字来表示.现在,WPF完全是关于容器和扩展的,我正在慢慢地围绕着它,但由于我没有看到"文本"或"内容"属性,我想我将不得不添加一些东西到我的进度条的容器.是否有一种技术或两种技术比我原来的WinForms冲动更自然?什么是最好的,最WPF自然的方式来添加文本到进度条?
这个问题是我在尝试回答另一个问题时注意到的结果.现在我很好奇知道为什么<asp:TextBox runat="server" Visible="<%= true %>" />会导致编译错误,而不是像我期望的那样导致可见的TextBox.
从我迄今发现的内容来看,<%= %>表达式并没有像我一直认为的那样被翻译成文字控件.但是,在呈现页面时,它会被评估并直接写入HtmlTextWriter.但显然解析器(我不确定这是将ASP.NET标记转换为.NET代码的部分的正确术语)<%= %>在将它们用作服务器控件的属性值时甚至不会尝试计算表达式.它只是将它用作字符串.我猜这就是为什么我收到错误消息:无法从'Visible'属性的字符串表示'<%= true%>'创建'System.Boolean'类型的对象.
如果我改为抛弃runat ="server"并将其<%= %>与常规的html-markup 相结合,如下所示:
<input type="button" id="Button1" visible='<%= true %>' />
Run Code Online (Sandbox Code Playgroud)
然后解析器只是在表达式之前和之后将块拆分为部分,然后将其写入render方法中的HtmlTextWriter.像这样的东西:
__w.Write("<input type=\"button\" id=\"Button1\" visible='");
__w.Write(true);
__w.Write("' />");
Run Code Online (Sandbox Code Playgroud)
作为我注意到的最后一件事...当我尝试<%# %>+ Control.DataBind(),然后我得到我期望的.它将控件数据绑定时使用的表达式挂钩,但与<%=%>表达式不同,生成的代码实际上会计算<%# %>表达式的内容.解析器最终生成以下内容:
[DebuggerNonUserCode]
private Button __BuildControldataboundButton()
{
Button button = new Button();
base.databoundButton = button;
button.ApplyStyleSheetSkin(this);
button.ID = "databoundButton";
button.DataBinding += new EventHandler(this.__DataBindingdataboundButton);
return button;
}
public void __DataBindingdataboundButton(object sender, EventArgs e)
{ …Run Code Online (Sandbox Code Playgroud) 首先,这是一个关于使用Windows窗体的桌面应用程序的问题,而不是ASP.NET问题.
我需要与其他表单上的控件进行交互.我试图通过使用,例如,以下来访问控件...
otherForm.Controls["nameOfControl"].Visible = false;
Run Code Online (Sandbox Code Playgroud)
它不像我期望的那样工作.我最终抛出了一个例外Main.但是,如果我public而不是制作控件private,我可以直接访问它们,因为......
otherForm.nameOfControl.Visible = false;
Run Code Online (Sandbox Code Playgroud)
但这是最好的方法吗?是否public将其他形式的控件视为"最佳实践"?是否有"更好"的方式访问另一种形式的控件?
进一步说明:
这实际上是我提出的另一个问题的后续问题,在C#中创建"树视图首选项对话框"类型的界面的最佳方法?.我得到的答案非常好,解决了许多很多组织问题,这些问题在保持用户界面简单易用的同时兼顾了运行时和设计时.然而,它确实提出了一个轻松控制界面其他方面的问题.
基本上,我有一个根表单,它实例化了根表单中面板中的许多其他表单.因此,例如,其中一个子表单上的单选按钮可能需要更改主,根表单上的状态条图标的状态.在这种情况下,我需要子表单与父(根)表单的状态条中的控件进行通信.(我希望这是有道理的,而不是在"谁是第一个"的方式.)
我需要为WMP对象创建自定义音量滑块.当前的滑块很难修改和使用,是否有一种简单的方法可以在HTML页面上生成滑块,将其值传递给javascript函数?
假设我有一个Control,它的位置是相对于它的父级.如果它嵌入很多次并且是主要形式的伟大曾孙,我如何确定它在我的整个屏幕上的位置,而不仅仅是它在直接父母中的位置?这是为了通过屏幕截图打印特定的控件(因为对于某些控件,DrawToBitmap无法正常工作).
在C#/ Winforms中,如何在应用程序启动时设置默认焦点?
我有一个带DataGridView控件的WinForms应用程序.我的控件有五列(比如"姓名","地址","电话"等)
我对默认列宽不满意.我希望能更好地控制列外观.我想要的是能够做到以下之一:
请建议 - 使用哪个属性以及如何使用.
我想知道使用Drupal(或任何其他CMS)开发网站的团队如何将版本控制,颠覆,git或类似功能集成到他们的工作流程中.您显然希望自定义代码和主题文件受版本控制,但是当您使用诸如Drupal之类的CMS时,很多工作包括配置模块和设置,所有这些都存储在数据库中.
所以当你是一个开发团队时,你如何在这样的项目上进行协作?将数据库转储到文件中并将该文件置于版本控制之下可能会起作用,但是当网站处于活动状态时,客户端会不断添加内容,这使得同步有点问题.
我很想知道其他人是如何做到这一点的.
controls ×10
winforms ×5
.net ×3
c# ×3
asp.net ×1
c++ ×1
datagridview ×1
drupal ×1
events ×1
focus ×1
inheritance ×1
init ×1
javascript ×1
location ×1
progress-bar ×1
slider ×1
version ×1
wmp ×1
wpf ×1