gpt4 book ai didi

.net - 如何将生成的方法标记为过时?

转载 作者:行者123 更新时间:2023-12-03 19:38:44 25 4
gpt4 key购买 nike

我正在使用 强类型 DataSet 手动添加行将容易出错。我提供工厂方法 正确创建行。我想引导我类的消费者远离生成的 Add*Row *Table 上的方法类。

添加 Obsolete attributes到生成的方法会成功的。遗憾的是,它们将在下次生成代码时被删除。

我无法使用 partial methods 在非生成代码中,因为 VS2008 DataSet 设计器不使用它们。
MyType.Dataset.Designer.cs看起来有点像这样:

public partial class ThingyDataTable : global::System.Data.DataTable, global::System.Collections.IEnumerable {
// I'd love an [Obsolete("Please use the factory method.")] here.
// I can't use a partial method, as this method isn't partial.
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public ShelfRow NewShelfRow()
return ((ShelfRow)(this.NewRow()));
}
}

有什么方法可以添加 Obsolete来自 MyType.cs 的属性?尝试 C 风格的原型(prototype)是行不通的,因为成员已经定义。干扰 partial不起作用,因为生成的成员不是 partial .
// BROKEN EXAMPLE:
public partial class ThingyDataTable {
// I'd love an [Obsolete("Please use the factory method.")] here.
// I can't use a partial method, as this method isn't partial.
[Obsolete("Please use the factory method.")]
public ShelfRow NewShelfRow(); // ERROR: member already defined.
}

有没有其他方法可以 标记生成的方法Obsolete ?

我怎么可能 告诫消费者远离生成的方法?

最佳答案

用于从 XSD 文件生成设计器文件的自定义工具并没有太多开箱即用的可配置性。

但是您可以:

  • 从键入数据集的 xsd 文件的“属性”对话框中将其删除,即将“MSDataSetGenerator”中的“自定义工具”字段设置为空。这样,您可以控制何时生成代码。但这很容易出错,因为您以后可能会忘记这样做...
  • 您可以创建自己的自定义工具来调用 xsd.exe 工具,并将所需的属性放置在适当的位置,但这意味着您在所有开发站上安装自定义工具并构建服务器。 (有关指针,请参阅 this post)
  • 或者,最后,您可以强制代码生成器创建 DataSet 的内部实现,并让这些类实现一组您可以允许您的客户使用的公共(public)接口(interface)。您的数据集类将不能直接在程序集之外的任何地方使用,但您的接口(interface)可以。

  • 后者不那么“自动”,因为您需要在界面中反射(reflect) DataSet 模式的更改,但您可以控制一切并且更加“工厂友好”。

    关于.net - 如何将生成的方法标记为过时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/584102/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com