c# - 是否有一种正确的方法来菊花链式连接类并以正确的方式调用它?

标签 c# class

我正在努力创建类层次结构树,以便在键入对象路径时在 Intellisense 中组织起来并且更容易阅读。例如“System.IO.FileStream()”。

我注意到它在我使用 var 时有效,但在我使用完整类命名时它不起作用。我还注意到当我使用 List<> 对象时它不起作用。谁能向我解释为什么以及我做错了什么。谢谢...

public class Vehicle
{
    public string Year { get; set; }
    public string Make { get; set; }
    public string Model { get; set; }
    public string Trim { get; set; }
}
public class Dealer
{
    public Vehicle VehicleData { get { return new Vehicle(); } set; }
}

这个有效...

var vehicle = new Dealer().VehicleData;
vehicle.Year = "2007";
vehicle.Make = "Ford";

这个不行...

Dealer().VehicleData vehicle = new Dealer().VehicleData;
vehicle.Year = "2004";
vehicle.Make = "Buick";

这个也不行...

var vehicles = new List<Dealer().VehicleData>();
vehicles.Add(
    new Dealer().VehicleData {
        Year = "2001", 
        Make = "Toyota"
    }
);
vehicles.Add(
    new Dealer().VehicleData {
        Year = "2003", 
        Make = "Volvo"
    }
);

最佳答案

Dealer().VehicleData 不是类型,而是属性。

您不能将变量声明为属性类型。

这和下面一样毫无意义:

public class Person
{
    public string Name { get; set; }
}

...
new Person().Name test;

注意这一行:

var vehicle = new Dealer().VehicleData;

实际上与这一行的含义相同:

Vehicle vehicle = new Dealer().VehicleData;

另请注意,在这种情况下,您不会存储对经销商的引用,而只会存储对车辆的引用,因此您应该像这样编写上面的代码:

var vehicle = new Vehicle();

您实际上是在寻找 namespaces 的概念吗? ?

这个:

System.IO.FileStream()

实际上必须这样使用:

new System.IO.FileStream()

部分如下:

 +----------------------+---- calling the constructor of FileStream
 |                      |
v+v                     vv
new System.IO.FileStream()
    ^---+---^ ^----+---^
        |          |
        |          +-- the name of the class
        |
        +-- the namespace of the FileStream class

声明它:

namespace System.IO
{
    public class FileStream
    {
        public FileStream()
        {
        }
    }
}

(请注意,FileStream 实际上没有无参数构造函数,因此上述内容实际上是错误的,但您明白了要点)

关于c# - 是否有一种正确的方法来菊花链式连接类并以正确的方式调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17911631/

相关文章:

python - 在 Python 中以一种很好的方式从列表中访问类变量

c# - 使用 NEST C# 在 Elasticsearch 中使用多个索引进行全文搜索

c# - AJAX 组合框问题

java - 如何在类中输入值时不覆盖值?

c++ - 无法在 C++ 中从 main 实例化另一个类

c++ - 为类对象创建线程

c++ - 通过返回指向 map 的指针访问 map C++

C# Windows 应用商店网格应用 (xaml) 模板

c# - JSON.NET 忽略我所有没有 JsonProperty 属性的属性

c# - 如何安装 Visual Studio dll 文件?