我们需要为安全目的“保护”一个类,使其不具有静态方法。我们不希望新手开发人员按照编码工具的建议将成员变为静态,因为我们需要使用带密码的构造函数来控制对该类的访问。
有没有办法在C#中保护.NET类,以防止它具有任何静态成员?
如果这种功能不可用,那么它是否值得在未来版本的.NET中实现?
谢谢。
有没有办法在C#中保护.NET类,以防止它具有任何静态成员?
如果这种功能不可用,那么它是否值得在未来版本的.NET中实现?
谢谢。
我们需要使用一个带有密码的构造函数来控制对这个类的访问。
听起来像是一个巨大的坏主意,但当然我对你试图解决的安全问题一无所知。这比你的问题更有趣: 你试图保护自己免受什么威胁? 可能有更好的方法来解决它。
有没有办法在C#中保护.NET类以防止具有任何静态��员?
让资深开发人员审核初级开发人员的checkin。无论如何,你都应该这样做,但如果这个类具有某种安全语义,那就更应该这样做。
如果没有这样的功能,未来版本的.NET是否值得实现?
极其不可能。
谢谢。
不客气!
我认为一个密封类就足够了,虽然静态成员在原始类声明中是允许的。我认为派生类将不允许进一步的静态成员。
我必须承认我从未听说过这样的安全方案。我认为我之所以没有听说它,是因为有很好的理由 - 你确定它能提供你想要的保护吗?
通过要求构造函数包含密码,您试图保护自己免受使用您的类的人的侵害。但是,这些人可以反编译和重新编译您的类以删除密码检查 - 那么您受到了什么保护呢?
建议
我基本上同意Eric Lippert的观点。但在这些情况下,我想要做类似于这样的事情(有时只是为了防止自己犯错),我会尝试为其编写一个单元测试。就像这样:
[Test]
public void Class_should_not_have_static_methods()
{
var staticMethods = typeof (Foo).GetMethods().Where(x => x.IsStatic);
Assert.That(staticMethods.Count(), Is.EqualTo(0), "Static methods: " + string.Join(", ", staticMethods.Select(x => x.Name)));
}