我理解继承的基础知识,但这个让我感到困惑.你会怎么说:
我目前的代码只允许每个对象一首歌曲:
class Song extends Album{}
class Album extends Artist{}
Run Code Online (Sandbox Code Playgroud)
我确定我忽略了一些重要的事情.有什么想法吗?
我在PHP中这样做
快问.我从目录列表中填充了一个列表框.每个文件都包含其名称和〜#####.我正在尝试将它全部读入一个字符串并用什么都替换〜####.####可以是长度为1-6的数字,可以是0-9之间的任何数字.这是我正在使用的代码:
string listItem = (listBox1.SelectedItem.ToString().Replace("~*",""));
Run Code Online (Sandbox Code Playgroud)
例:
Here223~123 ---> Here
Here224~2321 ----> Here
Run Code Online (Sandbox Code Playgroud)
我无法替换任何数字,因为我需要在〜之前的数字
我想DeploymentItem
在MSTest单元测试中使用静态变量作为参数,但似乎我不能这样做.当单元测试运行时,需要将一个XSL文件与DLL文件一起复制,并将该位置定义为
private static string _xslPath = Path.Combine("MyProjectDir", "transform.xsl");
Run Code Online (Sandbox Code Playgroud)
但是,当我然后执行以下操作时:
[TestMethod]
[DeploymentItem(DLL)]
[DeploymentItem(_xslPath)]
public void XmlToResultsTest() { }
Run Code Online (Sandbox Code Playgroud)
我得到这个构建错误:
属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式
好的,好的,但是自己组装路径似乎太脏了:
[DeploymentItem(@"MyProjectDir\transform.xsl")]
Run Code Online (Sandbox Code Playgroud)
我在这里过于挑剔想要使用Path.Combine
吗?我还缺少另一种选择吗?我想我可以把XSL文件放在根解决方案目录中,这样我就不必将项目目录作为路径的一部分传入.
我不确定发生了什么.我有以下基类:
public class MyRow : IStringIndexable, System.Collections.IEnumerable,
ICollection<KeyValuePair<string, string>>,
IEnumerable<KeyValuePair<string, string>>,
IDictionary<string, string>
{
ICollection<string> IDictionary<string, string>.Keys { }
}
Run Code Online (Sandbox Code Playgroud)
然后我有这个派生类:
public class MySubRow : MyRow, IXmlSerializable, ICloneable,
IComparable, IEquatable<MySubRow>
{
public bool Equals(MySubRow other)
{
// "MyRow does not contain a definition for 'Keys'"
foreach (string key in base.Keys) { }
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我会收到这个错误?"'MyNamespace.MyRow'不包含'Keys'的定义".这两个类都在MyNamespace
命名空间中.我试过访问this.Keys
,base.Keys
并且都没有从内部工作MySubRow
.我尝试将Keys
属性标记为public
,MyRow
但得到"修饰符'公共'对此项无效",我认为因为有必要实现一个接口.
我有以下类层次结构:
public class Row : ICloneable, IComparable, IEquatable<Row>,
IStringIndexable, IDictionary<string, string>,
ICollection<KeyValuePair<string, string>>,
IEnumerable<KeyValuePair<string, string>>,
System.Collections.IEnumerable
{ }
public class SpecificRow : Row, IXmlSerializable,
System.Collections.IEnumerable
{
public void Add(KeyValuePair<MyEnum, string> item) { }
}
Run Code Online (Sandbox Code Playgroud)
但是,尝试执行以下操作会出错:
var result = new SpecificRow
{
{MyEnum.Value, ""},
{MyEnum.OtherValue, ""}
};
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
集合初始化程序的最佳重载Add方法'Row.Add(string,string)'具有一些无效参数
我怎样才能使得在派生类上使用对象初始化器SpecificRow
允许类型MyEnum
?好像应该看到这个Add
方法SpecificRow
.
更新: 我实现了一个额外的接口,SpecificRow
所以它现在看起来像这样:
public class SpecificRow : Row, IXmlSerializable,
System.Collections.IEnumerable,
ICollection<KeyValuePair<MyEnum, string>>
{ }
Run Code Online (Sandbox Code Playgroud)
但是,我仍然得到同样的Add
错误.我将尝试IDictionary<MyEnum, string>
下一步.
在我对方法和类的.NET XML注释中,我尝试在<example><code></code></example>
块中提供用法示例.当我使用Sandcastle使用我的XML文档生成.chm文档文件时,它总是很好地格式化并尊重我的<code>
块中的换行符.但是,当我在Visual Studio的对象浏览器中浏览类和方法时,所有内容都在一行中运行,并且字体完全相同(代码不是等宽字体).这是由于我在XML评论中没有做到的事情,还是对象浏览器只是愚蠢的?我专门使用Visual Studio 2008 Team System.
我在Visual Studio 2008 Team System中为我的项目制作了类图,我想将这些图嵌入到我的Sandcastle .chm文件中.我一直在寻找Sandcastle 的Drawbridge组件,但他们显然是在处理旧版的Sandcastle; 这并不奇怪,因为看起来Drawbridge最后一次更新是在2008年.使用当前版本的Sandcastle我在Vista中,它安装在C:\ Program Files\Sandcastle帮助文件生成器.安装Drawbridge后,它创建了以下目录结构:C:\ Program Files\EWSoftware\Sandcastle帮助文件生成器\ BuildComponents.然后它在那里放了一个XML组件配置文件,但当然这对我安装的Sandcastle版本没有任何意义,因为它不在其路径的任何地方.
我希望只是将XML配置文件复制到Sandcastle的当前安装目录,但那里没有BuildComponents目录.那么,有没有人知道Drawbridge是否仍然适用于Sandcastle?如果有,我该如何安装?如果没有,我如何在我的Sandcastle .chm帮助文件中嵌入VS2008类图?
这与此问题略有关系.
documentation sandcastle helpfile class-diagram visual-studio
我试图以 Hpricot/Nokogiri 类型的方式解析而不是评估 rails ERB 文件。我试图解析的文件包含与使用 ERB(标准 Rails 视图文件)生成的动态内容混合的 HTML 片段ERB 符号、<%、<%= 等,就好像它们是 html/xml 标签一样。
理想情况下,我会得到一个类似于 DOM 的结构,其中 <%, <%= 等符号将作为它们自己的节点类型包含在内。
我知道可以使用正则表达式将某些东西组合在一起,但我正在寻找更可靠的东西,因为我正在开发一个工具,我需要在一个非常大的视图代码库上运行,其中 html 内容和 erb 内容是重要的。
例如,内容如下:
等等等等等等 <div>我的好文字 <%= my_dynamic_expression %></div>
将返回一个树结构,如:
根 - text_node(等等等等) - 元素(div) - text_node(我的好文字) - erb_node (<%=)
在进行提交之前,我希望在我的C#解决方案中运行所有数百项单元测试,因为它们仅需花费几分钟即可运行。但是,如果我已经全部运行了,一切都很好,然后我决定using
在我的解决方案中组织指令,是否真的有必要重新运行单元测试?我有一个宏,它遍历解决方案中的所有文件,并在每个宏上运行Visual Studio的“删除和排序”命令。以我的理解,只要using
更改指令后仍在构建所有项目,则运行时也应该没问题。这是正确的想法吗?
每次我构建我的C#解决方案时,我都会收到一些关于我从未见过或写过的接口的警告.我试过谷歌搜索其中一些,但没有得到点击.这些可能被埋在我正在引用的组件中吗?如果是这样,有没有办法让这些警告消失?
接口'IAlertable'标记为[dual],但不是从IDispatch派生的.它将被转换为IUnknown派生的接口.
接口'ICustomizationPermissionsReports'标记为[dual],但不是从IDispatch派生的.它将被转换为IUnknown派生的接口.
接口'IAlertable2'标记为[dual],但不是从IDispatch派生的.它将被转换为IUnknown派生的接口.
c# ×6
inheritance ×3
interface ×2
.net ×1
class ×1
compile-time ×1
dictionary ×1
erb ×1
formatting ×1
helpfile ×1
idispatch ×1
iunknown ×1
lex ×1
mstest ×1
oop ×1
parsing ×1
path ×1
php ×1
polymorphism ×1
ruby ×1
sandcastle ×1
string ×1
unit-testing ×1
warnings ×1