【问题标题】:Naming classes in shared project在共享项目中命名类
【发布时间】:2018-02-08 07:27:41
【问题描述】:

我有一个共享的Project.Core 类库,并且有

public class SomeClass
{
    //properties
    //methods
}

public class AnotherClass
{
    //properties
    //methods
}

然后我有一个引用该项目的网络应用程序 (Project.Web) 和桌面应用程序 (Project.Client),我想在 SomeClass 添加一些扩展,所以

public class SomeClass : Project.Core.SomeClass 
{
    //Extensions
}

但是当有一个文件时,它会导致 Project.Web.SomeClassProject.Core.SomeClass 之间的歧义

using Project.Core //to refer uninherited classes in the class library
using Project.Web  //to refer inherited Project.Web.SomeClass

public class MyClass
{
    public SomeClass SomeClass { get; set; } //Ambiguousness
    public AnotherClass AnotherClass { get; set; }
}

所以我有两种方法:将类库中的名称更改为SomeClassCore 或将继承的类更改为SomeClassWebSomeClassClient

哪个是更好的选择,还是有其他聪明的方法?

【问题讨论】:

  • 这真的只是见仁见智。但是我的 意见是重用类名是没有意义的。 SomeClass 大概是 Project.Core.SomeClass,加上一些东西。它的名称应该反映已添加的“一些东西”。如果您想更改基类名称,那也没关系。但我认为更改派生类的名称会更典型(参见,例如Stream、vs FileStreamMemoryStream 等)
  • 在具有两个 using 语句的类中的另一个选项是在实例化它时使用完全限定名称:Project.Core.SomeClass pcSomeClass = new Project.Core.SomeClass()

标签: c# inheritance naming-conventions class-library


【解决方案1】:

您可以为命名空间使用别名。只需为要导入的命名空间定义一些别名,并在命名造成歧义的地方引用别名

在您的情况下,您可以给命名空间起别名,而不是更改类的名称。代码如下:

using web = Project.Web
using core = Project.Core

当您想从两个项目中引用 SomeClass 时,您可以编写类似这样的内容

web.SomeClass        //This will refer class from Project.Web
core.SomeClass       //This will refer class from Project.Core

Using Directive 在这里您可以找到更多关于使用指令引用别名

【讨论】:

    猜你喜欢
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多