我很难在C#中实现一个只在抽象基类中有一个getter的属性,但是我需要在其中一个派生类中引入一个setter.
我的类图概述如下:

我的目标是两个类TextElementStatic和TextElementReferenceSource应该具有包含getter和setter 的Text属性,而类TextElementReferenceTarget应该具有仅具有getter 的Text属性.我在引用所有这些对象时经常使用ITextElement,我需要确保ITextElement接口只有一个getter.此外,基类TextElement实现了许多通用代码,因此所有类都需要从该类继承.
我当前的代码如下所示:
接口:ITextElement
public interface ITextElement
{
string Text { get; }
}
Run Code Online (Sandbox Code Playgroud)
接口:ITextElementUpdatable
public interface ITextElementUpdatable : ITextElement
{
new string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
抽象类:TextElement (这是我的问题所在,解释如下)
public abstract class TextElement : ITextElement
{
// I want to mark this 'abstract', but that causes my problem
public virtual string Text …Run Code Online (Sandbox Code Playgroud) 当我使用打开上下文菜单时<control>.ContextMenu.IsOpen = true,上下文菜单将变为可见,但是打开或关闭事件均不会触发。
以编程方式打开上下文菜单时,如何确保ContextMenuOpeningand ContextMenuClosing事件引发?
看下面的XAML
<Button Name="ContextMenuButton"
Content="Click me!"
Click="ContextMenuButton_Click"
ContextMenuOpening="ContextMenuButton_OnContextMenuOpening"
ContextMenuClosing="ContextMenuButton_OnContextMenuClosing">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header="First element" />
<MenuItem Header="Second element" />
</ContextMenu>
</Button.ContextMenu>
</Button>
Run Code Online (Sandbox Code Playgroud)
和下面的代码
public MainWindow() // Constructor
{
InitializeComponent();
ContextMenuButton.ContextMenuOpening += (sender, args) => Debug.Print("Opening #2");
ContextMenuButton.ContextMenuClosing += (sender, args) => Debug.Print("Closing #2");
}
private void ContextMenuButton_Click(object sender, RoutedEventArgs e)
{
Button button = (sender as Button);
button.ContextMenu.IsOpen = true; // How should I open the ContextMenu?
}
private void …Run Code Online (Sandbox Code Playgroud) xUnit.net中是否有一种方法可以使单元测试依赖于另一个单元测试,以便在另一个测试失败时将其跳过?
注意:这不是关于测试之间共享夹具或使测试彼此耦合等问题。我避免了这一点。
Given: Unit tests OuterTest and InnerTest
Condition: If OuterTest is dependent on InnerTest and InnerTest fails
Result: OuterTest is skipped (ideally with an explanation)
Run Code Online (Sandbox Code Playgroud)
这是单元测试序列化的一部分,但是我也可以想到其他用例。我有一个外部类型,它具有内部类型的依赖关系,其中内部被序列化为外部序列化的一部分。我有一个针对内部类型的序列化单元测试,如果失败了,我知道对外部的序列化单元测试将由于嵌套而失败。
类型看起来像这样:
[Serializable]
class Inner {}
[Serializable]
class Outer {
public Outer(Inner inner) {
Inner = inner;
}
[Serializable]
Inner Inner { get; }
}
Run Code Online (Sandbox Code Playgroud)
我真的不想在外部的单元测试中使用内部的Stub,因为这迫使我引入内部的接口并弄乱了仅需要这些类型的单个具体实现的层次结构。这也迫使我为存根创建自定义序列化程序,这听起来比好处多麻烦。
鉴于很难为内部类创建存根,以下是我的论点:我不希望两个测试都失败,因为这很难找到失败的根本原因。我认为最好跳过外部测试并给出相关性失败的警告。
搜索一段时间后,我没有找到有关此用例的任何信息,因此我有以下问题:
我正在使用 C#/VSTO 为 PowerPoint (2013) 开发插件。当用户处于设计模式而不是演示模式时,加载项将工作。
如何捕捉与幻灯片上的形状/对象有关的鼠标事件,例如 mouseOver、mouseDown 等?我想收听这些事件以创建位于对象/形状附近的自定义 UI。有没有我可以监听的事件,或者是否需要使用更高级的方法,例如创建全局鼠标监听器,将坐标转换为 PowerPoint 形状,并循环浏览幻灯片上的形状以查看鼠标是否在任何形状的边界?我还将欣赏该问题的其他创造性解决方案。
我试图在没有任何运气的情况下寻找答案。但是,我知道这在某种程度上是可能的,因为其他加载项正在执行我想要的操作。一个例子是 Think-Cell ( https://www.youtube.com/watch?v=qsnciEZi5X0 ),其中您操作的对象是“普通” PowerPoint 对象,例如 TextFrames 和 Shapes。
我正在 Windows 8.1 Pro 上使用 .Net 4.5。
c# ×4
.net ×2
contextmenu ×1
inheritance ×1
overriding ×1
powerpoint ×1
properties ×1
unit-testing ×1
vsto ×1
wpf ×1
wpf-controls ×1
xunit.net ×1