使用Resharper 4.1,我遇到了这个有趣的警告:"通过派生类型访问类型的静态成员".以下是发生这种情况的代码示例:
class A {
public static void SomethingStatic() {
//[do that thing you do...]
}
}
class B : A {
}
class SampleUsage {
public static void Usage() {
B.SomethingStatic(); // <-- Resharper warning occurs here
}
}
Run Code Online (Sandbox Code Playgroud)
当通过B使用A的静态成员时,有没有人知道有什么问题(如果有的话)?
我给ReSharper C#一个旋转.我发现我更喜欢Visual Studio更简单的"查找所有引用"而不是ReSharper更详细的"Find All Usages"."查找所有引用"找到我需要的所有内容95 +%的时间.有没有人知道如何关闭"查找所有用法"并恢复VS的实现?
我们都听说过早优化,但您如何看待过早的重构?你认为有这样的事吗?这是我得到的.
首先,阅读Martin Fowler的开创性作品"重构"在字面上改变了我在编程方面的生活.
然而,我注意到的一件事是,如果我开始过快地重构一个类或框架,我有时会发现自己编码到一个角落里就可以说了.现在,我怀疑这个问题本身并不是真正的重构,但可能是过早/糟糕的设计决策/假设.
您对此问题有何看法,见解和/或意见?您对此问题有任何建议或共同的反模式吗?
编辑:
从阅读你的答案和更多地反思这个问题,我想我已经认识到,在这种情况下我的问题实际上是"过早设计"的问题,而不一定是"过早的重构".在编码过程的早期,我一直在设计和重构这个方向.我保持一定程度的设计不可知性并专注于对清洁代码进行重构,这让我有点耐心,这使我无法走下这些设计兔子的道路.
以下是我发现自己不时使用的内容,我只是希望得到一些关于实践优点的反馈.
让我们说我有一个基类:
abstract class RealBase {
protected RealBase(object arg) {
Arg = arg;
}
public object Arg { get; private set; }
public abstract void DoThatThingYouDo();
}
Run Code Online (Sandbox Code Playgroud)
我经常创建一个通用的第二个基类,它处理从基类中的"object"类型到"T"类型的转换,如下所示:
abstract class GenericBase<T> : RealBase {
protected GenericBase(T arg)
: base( arg ) {
}
new public T Arg { get { return (T) base.Arg; } }
}
Run Code Online (Sandbox Code Playgroud)
这允许我在没有强制转换操作的情况下访问"Arg"作为其显式类型:
class Concrete : GenericBase<string> {
public Concrete( string arg )
: base( arg ) {
}
public override void DoThatThingYouDo() {
// NOTE: …Run Code Online (Sandbox Code Playgroud)