COMMUNITY: How to properly ask a question on Forums
Become a member
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
Answers
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
C# Corner Home
Technologies
Monthly Leaders
ASK A QUESTION
Forum guidelines
kobi kobi
1.6k
21
324
Code error in Decorator design pattern..
May 20 2017 7:41 PM
Hello everyone,
It's the first time I publish something in the forum, so I apologize if the code is not presented in the appropriate font for a code.. :/
I tried to implement the decorator design pattern, but for some reason something goes wrong during the process and the compiler throws NullReferenceException for a reason I can't figure out.
I'd be grateful for your help.
I have this as my basic item:
public
class
Hambruger
{
public
virtual
int
PattySizeInGrams {
get
;
set
; }
public
virtual
string
Bun {
get
;
set
; }
public
Hambruger()
{
PattySizeInGrams = 200;
Bun =
"Ordinary bun"
;
}
}
public virtual void GetDescription()
{
Console.WriteLine("Hamburger:\n {0}, {1} grams", Bun,PattySizeInGrams );
}
this is the abstract decorator class:
public
abstract
class
HamburgerDecorator : Hambruger
{
protected
Hambruger hamburgerToBeDecorated;
public
HamburgerDecorator(Hambruger theHamburger)
{
hamburgerToBeDecorated = theHamburger;
}
public
override
string
Bun
{
get
{
return
hamburgerToBeDecorated.Bun;
}
set
{
hamburgerToBeDecorated.Bun = value;
}
}
public
override
int
PattySizeInGrams
{
get
{
return
hamburgerToBeDecorated.PattySizeInGrams;
}
set
{
hamburgerToBeDecorated.PattySizeInGrams = value;
}
}
}
This is the concrete decorator class:
public
class
ExtraMeatDecorator : HamburgerDecorator
{
public
ExtraMeatDecorator(Hambruger hamburgerToDecorate) :
base
(hamburgerToDecorate) { }
public
override
void
AddExtraMeat()
{
hamburgerToBeDecorated.PattySizeInGrams += 100;
}
}
And this is my Main:
class
Program
{
static
void
Main(
string
[] args)
{
Hambruger ham =
new
Hambruger();
Hambruger decorated =
new
ExtraMeatDecorator(ham);
}
}
The exception happens when "new
ExtraMeatDecorator
(ham) is called. Before it calls the ExtraMeatDecorator constructor, it has to call its base constructor -
HamburgerDecorator, which in turn, has to call first to the Hamburger constructor. The PattySizeInGrams
and Bun properties are null and thus, cannot make the assignment in the Hamburger constructor.
I just can't seem to figure out the reason. I've made a simpler example in which this problem didn't happen:
public
class
Parent
{
public
int
Age {
get
;
set
; }
public
Parent()
{
Age = 25;
}
}
public
class
Child : Parent
{
public
Child(Parent par) :
base
() { }
}
Reply
Answers (
1
)
Unit of Work with repository pattern in Entityframework
Why entity framework use over ado.net.
"