C# 防止某些类使用属性调用某些方法

C# 防止某些类使用属性调用某些方法,c#,.net,attributes,C#,.net,Attributes,我计划使用属性为程序中的某些类授予方法调用权限,但我不知道如何进行 例如,以下是我希望我的Customer类的外观: [ForbiddenMethodsAttr(listOfMyForbiddenMethods)] public class Customer { public Customer { } } 如果我想调用一个给定的函数,intellisense应该会让我感到温暖,因为我不能这样做,因为调用这些函数可能会导致一些问题,而不是我是唯一一个会编写这个项目的人,还有一些朋友。那么

我计划使用属性为程序中的某些类授予方法调用权限,但我不知道如何进行

例如,以下是我希望我的Customer类的外观:

[ForbiddenMethodsAttr(listOfMyForbiddenMethods)]
public class Customer
{
    public Customer { }
}

如果我想调用一个给定的函数,intellisense应该会让我感到温暖,因为我不能这样做,因为调用这些函数可能会导致一些问题,而不是我是唯一一个会编写这个项目的人,还有一些朋友。那么,如果有可能编写这样一个属性,那么如何编写呢

您可以将这些方法标记为过时,然后调用它们的任何人都会收到编译器警告,尽管不是错误。这并不优雅,但也不是试图在不使用范围约定的情况下限制方法调用。

听起来您基本上需要编写Roslyn代码分析器。这种能力不是普通C语言的一部分。你也应该考虑一下你的体系结构。如果这些代码模块中的一些导致了意外的副作用,那么应该明确将要发生什么。您还可能想考虑用私有/内部/类等来限制类/方法,以防止意外使用。如果需要公开类实例并使其他贡献者在不同的程序集中编写代码,则制作类或某些方法。或者更好的是,重构整个过程,使内部是内部的,公共类成员实际上可以安全使用。这就是为什么有班级存在的一个重要原因:把柔软的软东西安全地放在里面。您正在重新设计轮子。只需将管理员和普通客户的常用方法放在基类中,然后在CustomerAdmin和CustomerUser类中继承该基类customer,这两个类定义了这些客户类型的特殊情况。这样,只有允许的方法才能接触到不同的客户类型。我在这个项目中遇到了一些类似的魔术问题,但我开始意识到,这些案例中99%都与糟糕的设计有关:D是时候我们对这些东西进行了第二次思考了。这个问题的答案是合理的,虽然我想我已经让小伙子们重新考虑了这个案子的整个结构。总而言之,谢谢你的建议!