- Tìm số 0 đầu tiên trong một mảng bit
- Unix Hiển thị thông tin về các tập tin khớp với một trong hai mẫu
- Biểu thức chính quy thay thế nhiều tệp
- Ẩn lệnh từ xtrace
提前感谢您阅读本文。我不完全理解如何/何时使用摘要,所以我试图在我从事的每个项目中考虑它,看看它是否会在某一天全部点击 Smile | :)
此外,可访问性级别(私有(private)、 protected 、内部)与关键字 static、abstract 和 override 的组合往往让我有点困惑。我如何定义这个方法/属性/类....
这对我来说并不是什么大谜团,但有些项目让我在处理这些主题时绕着圈子编码。
话虽如此,
我有一个应用程序可以读取 XML 文档并输出文本和图像文件。我还将所有信息存储在数据库中。我让它运行良好。
XML 具有包含必填字段的标准实现,多个组织使用它向我的应用程序提交数据。所有组织都应(至少)使用 XML 实现指南中概述的必需节点/元素。
因此,我想要一个默认数据对象类型,以便能够为所需元素派生出特定组织的数据类型。 (如果要使用此对象,则这些是必须实现的字段)。
如果组织。只要使用默认要求,我就可以使用默认对象。如果他们使用额外的(可选)字段,我将不得不创建一个继承默认类型的新类型。
我的第一个想法是使用具有 protected 属性的抽象类来满足我的最低要求:
public abstract partial class AbstractDataObject
{
protected string DataObjectName;
protected DateTime? DataObjectDate;
etc...
}
然后,如果组织只使用节点的必需元素而没有可选元素,我可以使用“默认”对象。
internal partial class DefaultDataObject : AbstractDataObject
{
public new string DataObjectName { get; set; }
public new DateTime? DataObjectDate { get; set; }
etc...
}
但是,如果组织使用所需节点的可选字段,我可以使用派生的组织数据对象。
internal sealed partial class OranizationDataObject : AbstractDataObject
{
public new string DataObjectName { get; set; }
public new DateTime? DataObjectDate { get; set; }
etc...
//Optional fields used by this organization
public string DataObjectCode { get; set; }
etc...
}
我需要抽象类吗?在我看来,我可以只拥有一个 DefaultDataObject(类似的东西):
internal partial class DefaultDataObject
{
public virtual string DataObjectName { get; set; }
public virtual DateTime? DataObjectDate { get; set; }
etc...
}
然后:
internal sealed partial class OranizationDataObject : DefaultDataObject
{
public override string DataObjectName { get; set; }
public override DateTime? DataObjectDate { get; set; }
etc...
//Optional fields used by this organization
public string DataObjectCode { get; set; }
etc...
}
我真的只是想了解如何定义这些对象,以便我可以在每个组织中重复使用它们。这两种方式似乎都有效,但我希望了解如何正确定义它们。
将 XML 获取到上述对象中:
public DefaultDataObject ExtractXmlData(XContainer root)
{
var myObject = (from t in root.
Elements("ElementA").Elements("ElementB")
select new DefaultDataObject()
{
DataObjectName = (String)t.Element("ChildElement1"),
DataObjectDate =
Program.TryParseDateTime((String)
t.Elements("ChildElement2")
.ElementAtOrDefault(0)
),
etc....
hoặc
public OranizationDataObject ExtractXmlData(XContainer root)
{
var myObject = (from t in root.
Elements("ElementA").Elements("ElementB")
select new OranizationDataObject()
{
DataObjectName = (String)t.Element("ChildElement1"),
DataObjectDate = Program.TryParseDateTime(
(String)t.Elements("ChildElement2")
.ElementAtOrDefault(0)),
DataObjectCode = (String)t.Element("ChildElement3"),
等....
再次感谢阅读。不要忘记给服务员小费....
乔
1 Câu trả lời
首先,如果您的基类是普通的 DTO 类,则它不需要是抽象的。如果您没有任何需要由派生类以不同方式实现的功能,您可以简单地使其成为一个普通基类,它将包含公共(public)属性.
接下来,如果您要转到 hide them,那么在基类(在您的情况下是抽象的)中声明属性是没有意义的。 (使用 mới
关键字)。 DefaultDataObject
的第一个代码片段不必要地创建了一堆具有相同名称的新属性。完全删除它们 - 它们在基类中已经定义.
[编辑] 最初我没有注意到这一点,@svick 警告我,您的基类实际上包含字段 而不是属性,这让我想知道为什么您根本不需要添加 mới
关键字。我快速浏览了您的代码并将它们视为属性。在任何情况下,您都不应该公开公共(public)字段 - 至少通过添加 { get; 将它们更改为自动实现的属性。放;
block 。
换句话说,这很简单:
// this doesn't need to be abstract.
// just put all the common stuff inside.
public class BaseDO
{
// as svick pointed out, these should also be properties.
// you should *never* expose public fields in your classes.
public string Name { get; set; }
public DateTime? Date { get; set; }
}
// don't use the new keyword to hide stuff.
// in most cases, you won't need that's behavior
public class DerivedDO : BaseDO
{
// no need to repeat those properties from above,
// only add **different ones**
public string Code { get; set; }
}
作为旁注,但恕我直言很重要,您应该简化命名(并使其成为 more clearer 您的代码所做的)。例如,无需在每个属性名称中重复“DataObject”。但由于您的代码可能只是一个简化版本,所以没关系。
最后,你听说过XmlSerializer
吗? ?您不需要手动遍历 XML 元素。调用 XmlSerializer
来序列化和反序列化您的数据就足够了。
关于c# - 抽象,还是不抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8865663/
Tôi hơi bối rối về tính trừu tượng trong Java. Tôi đã kiểm tra nhiều trang nói rằng trừu tượng hóa là ẩn dữ liệu (ẩn triển khai). Theo tôi hiểu, trừu tượng là một "sự triển khai một phần". Chỉ cần xác định những gì bạn cần trong các lớp/giao diện trừu tượng, sau đó mở rộng/triển khai chúng và thêm
Tôi mới làm quen với Ruby, chủ yếu sử dụng C# và ActionScript 3 (cùng với một số ngôn ngữ khác). Tôi tò mò về chức năng trừu tượng. Cụ thể là gói và tóm tắt các thư viện FTP và SFTP của Ruby. Tôi tìm kiếm xung quanh và tìm thấy một
Nội dung Java cơ bản (Tóm tắt) Tóm tắt Định nghĩa của abstract Sử dụng abstract Định nghĩa của abstract class
Tôi đã dành thời gian trong tháng này để vật lộn với Emacs Lisp, cố gắng để chức năng tự động thụt lề hoạt động tốt hơn theo nhu cầu của tôi. Thật đáng ngạc nhiên khi hầu hết mã thụt lề ở cấp độ thấp. Tôi chỉ thấy một vài sự trừu tượng như tìm kiếm biểu thức chính quy đầu tiên không có trong chuỗi hoặc bình luận
Tôi có những điều sau đây: public abstract class Foo{ //nội dung của Foo // ... public class Bar mở rộng
Tôi có ba lớp (lớp A, lớp B và lớp C). Lớp A gọi một thể hiện của B và chạy start(). Lớp B mở rộng Thread, do đó khi start() được gọi, mọi thứ trong phương thức run() sẽ được thực thi. hiện hữu
Câu hỏi này đã có câu trả lời: Gọi phương thức lớp con từ lớp cha (5 câu trả lời) Đã đóng 7 năm trước. Klasse1 là lớp trừu tượng có một phương thức foo(). K
Tôi có một hàm như thế này: def test(): x = "3" # Trong mã thực tế, hàm này được tính nếu x là None: return
Tôi có mối quan hệ giữa hai lớp cơ sở: public abstract class RecruiterBase { // Thuộc tính khai báo ở đây // Các hàm tạo khai báo
Đây là lần đầu tiên tôi đăng bài và tôi đang gặp phải rất nhiều vấn đề. Hiện tại tôi có một lớp AbstractDevice có tiêu đề: public abstract class AbstractDevice> implements De
Tôi có một lớp MotorDefinition và một lớp trừu tượng có tên là Motor: class MotorDefinition { public: MotorDefinition(int p1,
Có cách nào để tạo các quy tắc trừu tượng của css trong loại mã này (sass): #cottage-image-gallery input:nth-of-type(1):checked ~ label:nth-o
Có thể khai báo một kiểu cơ sở đã biết và cho phép chuyển giao tất cả các kiểu dẫn xuất không? [ServiceContract] giao diện công khai IService { [OperationContract]
Hiện tại tôi đang phát triển cơ chế tạo nhân vật cho một trò chơi văn bản dựa trên Java, nhưng tôi gặp phải một vấn đề và không biết lỗi ở đâu. Tôi có lớp "Character" là lớp trừu tượng và một lớp khác là "NPCharacter" được xây dựng dựa trên lớp này.
Xin lỗi, tiêu đề gây nhầm lẫn. Không chắc chắn lắm về cách diễn đạt, có thể đó là vấn đề! Tôi đang tìm một sự trừu tượng tốt để sử dụng cho các tình huống liên quan đến luồng đồng thời. Tôi đã gần đến đích rồi, nhưng vẫn chưa hoàn toàn. Để đơn giản hóa một chút, tôi đã thu thập hai cảm biến trên điện thoại Android của mình
Cảm ơn bạn trước vì đã đọc bài viết này. Tôi không hiểu đầy đủ về cách/thời điểm sử dụng đoạn trích, vì vậy tôi cố gắng nghĩ về nó trong mọi dự án tôi làm và xem liệu một ngày nào đó mọi thứ có ổn không. Cười | :) Ngoài ra, các mức độ truy cập (riêng tư, được bảo vệ
Tôi đang khám phá meme XML -> XSLT -> HTML để tạo nội dung web. Tôi có rất ít kinh nghiệm với XSLT. Tôi tò mò muốn biết có những cơ chế nào trong XSLT để xử lý trừu tượng hóa hoặc "tái cấu trúc". Ví dụ, sử dụng HTML chung và
Trong các buổi nói chuyện này, Nicholas Zakas và Addy Osmani thảo luận về ý tưởng sử dụng mô hình facade như một hộp cát khi xây dựng các ứng dụng Javascript lớn nhằm tách ứng dụng khỏi các thư viện cơ sở bên dưới. Sự tách rời này về mặt lý thuyết cho phép
Tôi đang sử dụng C++ và CUDA/C và muốn viết mã cho một vấn đề cụ thể, nhưng tôi gặp phải một vấn đề đơn giản hóa rất khó khăn. Kinh nghiệm của tôi với lập trình song song không phải là không đáng kể nhưng khá hạn chế, và tôi không thể lường trước được hết những đặc thù của vấn đề này. Tôi nghi ngờ liệu có cách nào thuận tiện hay thậm chí là "dễ dàng" không
Giả sử tôi có: trait A class B extends A class C extends A Có cách nào để cấu hình tham số kiểu không: class Foo[AType <: A with canCreateIn
Tôi là một lập trình viên xuất sắc, rất giỏi!