小编Ken*_*nic的帖子

如何将public abstact类的子类限制为同一程序集中的类型,从而允许将受保护的成员键入内部类型

这个问题类似于c#内部抽象类,如何隐藏外部使用但我的动机不同.这是场景

我从以下开始:

internal class InternalTypeA {...}

public class PublicClass
{
   private readonly InternalTypeA _fieldA;

   ...
}
Run Code Online (Sandbox Code Playgroud)

上面的编译很好.但后来我决定提取一个基类并尝试编写以下内容:

public abstract class PublicBaseClass
{
   protected readonly InternalTypeA _fieldA;

   ...
}
Run Code Online (Sandbox Code Playgroud)

因此问题是,受保护的成员在程序集外部是可见的,但是是内部类型,因此它不会编译.

手头的问题是如何(或者我可以?)告诉编译器只有与PublicBaseClass相同的程序集中的公共类可以继承它,因此_fieldA不会在程序集之外公开?

或者是否有另一种方法可以做我想做的事情,有一个公共超类和一组公共基类,它们都在同一个程序集中,并使用它们的公共("受保护")代码中的该程序集的内部类型?

到目前为止我唯一的想法是:

public abstract class PublicBaseClass
{
   private readonly InternalTypeA _fieldA;

   protected object FieldA { get { return _fieldA; } }

   ...
}

public class SubClass1 : PublicBaseClass
{
    private InternalTypeA _fieldA { get { return (InternalTypeA)FieldA; } } 
}

public class SubClass2 : PublicBaseClass
{
    private InternalTypeA …
Run Code Online (Sandbox Code Playgroud)

c# abstract-class protected internal

5
推荐指数
1
解决办法
245
查看次数

使用 Git SCM 设置全局管道库时 ${library.pipeline-utils.version} 放在哪里

我正在尝试设置一个全局管道库,它将@Library()根据这些指令显式加载。我在从 master 分支加载默认库版本方面工作正常。

我无法做的是弄清楚如何配置事物,以便它可以使用Library('lib-name@branch-name')语法根据请求加载不同的分支。

指令说:

“使用旧版 SCM 时,您需要在 SCM 配置中的某处包含 ${library.pipeline-utils.version}。”

我曾尝试使用${library.pipeline-utils.version}作为Branch Specifier我能想到的唯一合乎逻辑的地方放置它的值。但这只是打破了事情。尝试加载库失败:

Fetching upstream changes from ssh://git@stash:7999/jen/pipeline-utils.git
 > git --version # timeout=10
 > git fetch --tags --progress ssh://git@stash:7999/jen/pipeline-utils.git +refs/heads/*:refs/remotes/origin/*
 > git rev-parse refs/remotes/origin/${library.pipeline-utils.version}^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/origin/${library.pipeline-utils.version}^{commit} # timeout=10
 > git rev-parse origin/${library.pipeline-utils.version}^{commit} # timeout=10
ERROR: Couldn't find any revision to build. Verify the repository and branch configuration for this job.
Run Code Online (Sandbox Code Playgroud)

这让我觉得我把变量放在正确的地方,但詹金斯没有插入它。(漏洞?)

这是使用 Jenkins 2.7.1 和 Pipeline …

jenkins jenkins-pipeline

4
推荐指数
1
解决办法
2584
查看次数

如何获取python中最高级(输入)脚本的名称?

我在Python中有一个实用程序模块,需要知道它在其中使用的应用程序的名称。实际上,这是指用来启动应用程序的顶级python脚本的名称(即__name == “ __main__”为真)。__name__给了我当前python文件的名称,但是如何获得调用链中最顶级的文件的名称?

python introspection python-2.7

2
推荐指数
1
解决办法
1529
查看次数

WPF 中带有方括号或圆括号的工具提示的奇怪渲染行为

我有一个带有工具提示的按钮,定义如下:

<Button Width="25" ToolTip="Delete selected name (Ctrl + F12).">-</Button>
Run Code Online (Sandbox Code Playgroud)

当我在运行时将鼠标悬停在按钮上时,工具提示显示为

(.删除所选名称 (Ctrl + F12

我也尝试将工具提示定义为

<Button Width="25">
  <Button.ToolTip>Delete selected name (Ctrl + F12).</Button.ToolTip>
  -
</Button>
Run Code Online (Sandbox Code Playgroud)

我也试过用括号代替括号。

在所有情况下,最终关闭 ) 或 ] 之后的文本都被截断并附加到字符串的前面,以开头 ( 或 [ 为前缀。我已经在谷歌上搜索了工具提示所需的任何特殊转义提示,然后就干了。我是不是在某处错过了明显的东西,还是我最终会失去控制?:-|

这是使用 .Net 框架的 4.0 版本。

.net wpf xaml tooltip wpf-controls

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