Skip to content

Commit d849aeb

Browse files
committed
Add custom ICloneable interface
1 parent a44a715 commit d849aeb

File tree

3 files changed

+10
-4
lines changed

3 files changed

+10
-4
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace PrototypeLibrary.WebPageScraperExample;
2+
3+
public interface ICustomCloneable
4+
{
5+
WebPageScraper Clone();
6+
}

src/CreationalPatterns/Prototype/PrototypeLibrary/WebPageScraperExample/WebPageScraper.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
namespace PrototypeLibrary.WebPageScraperExample;
22

33
#pragma warning disable IDE0060 // Remove unused parameter
4-
public class WebPageScraper : ICloneable
4+
public class WebPageScraper : ICustomCloneable
55
{
66
private string _title = string.Empty;
77
private int _numberOfHeaders;
@@ -20,10 +20,10 @@ public void PrintPageContent() =>
2020
$"Number of headers: {_numberOfHeaders}, " +
2121
$"Number of pictures: {_numberOfPictures} ");
2222

23-
public object Clone() =>
23+
public WebPageScraper Clone() =>
2424
// If we have complex data type MemberwiseClone call wouldn't be enough.
2525
// MemberwiseClone creates a shallow copy of the current object (it goes just one level in the depth).
26-
MemberwiseClone();
26+
(MemberwiseClone() as WebPageScraper)!;
2727

2828
private void Scrape(string page)
2929
{

src/CreationalPatterns/Prototype/PrototypeLibrary/WebPageScraperExample/WebPageScraperExecutor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public static void Execute()
1717

1818
// After implementing of ICloneable, we can call Clone().
1919
// This is basically prototype pattern.
20-
var scraper3 = (scraper.Clone() as WebPageScraper)!;
20+
var scraper3 = scraper.Clone();
2121
scraper3.PrintPageContent();
2222
}
2323
}

0 commit comments

Comments
 (0)