SlideShare uma empresa Scribd logo
1 de 15
Unsafe
• Unsafe code often involves the use of
pointers.
• Unsafe code and pointers enable C# to be
used to create applications that one might
normally associate with C++: highperformance, systems code.
• the inclusion of unsafe code and pointers
gives C# capabilities that are lacking in Java.
• Unsafe code is not code that is poorly written; it
is code that does not execute under the full
management of the common language runtime
(CLR).
• C# is normally used to create managed code.
• It is possible, however, to write code that does
not execute under the full control of the CLR. This
unmanaged code is not subject to the same
controls and constraints as managed code, so it
is called “unsafe”.
• it is not possible to verify that it won’t perform
some type of harmful action.
• Because a pointer can point anywhere in
memory, it is possible to misuse a pointer.
• It is also easy to introduce a coding error
when using pointers. This is why C# does not
support pointers when creating managed
code.
• C# does allow you to create and use pointers.
However, all pointer operations must be
marked as unsafe since they execute outside
the managed context.
Declaring a Pointer
• Pointer variables must be declared as such.
type * var-name ;
• type is the pointer’s referent type.
• var-name is the name of the pointer variable.
• example. To declare ip to be a pointer to an
int, use this declaration:
int* ip;
• If you come from a C/C++ background, then
you need to be aware of an important
difference between the way C# and C/C++
declare pointers.
• When you declare a pointer type in C/C++, the
* is not distributive over a list of variables in
a declaration.
• Thus, in C/C++, this statement
int* p, q;
• in C#, the * is distributive and the declaration
int* p, q;
• creates two pointer variables.
• Thus, in C# it is the same as these two
declarations:
int* p;
int* q;
• Two operators are used with pointers: * and
&.
• The & is a unary operator that returns the
memory address of its operand.
• int* ip;
• int num = 10;
• ip = #
• puts into ip the memory address of the
variable num.
• ip does not contain the value 10.
• The second operator is *, and it is the
complement of &.
• it refers to the value of the variable pointed
to by a pointer.
• ip = #
• int val = *ip;
• will place into val the value 10, which is the
value of num, which is pointed to by ip .
unsafe
• Any code that uses pointers must be marked
as unsafe by using the unsafe keyword.
• You can mark types (such as classes and
structures), members (such as methods and
operators), or individual blocks of code as
unsafe.
• using System;
• class UnsafeCode {
// Mark Main as unsafe.

unsafe static void Main() {
int count = 99;
int* p; // create an int pointer
p = &count; // put address of count into p
Console.WriteLine("Initial value of count is "
+*p);
*p = 10; // assign 10 to count via p
Console.WriteLine("New value of count is " + *p);
}}
Using fixed
• The fixed keyword can be used only in an
unsafe context.
• The fixed modifier is often used when working
with pointers.
• It prevents a variable from being moved by
the garbage collector.
• This is needed when a pointer refers to a field
in a class object.
• Using pointers in C# require much more
attention then in C++. That is because of
garbage collector (g.c.) which can run memory
cleaning. During cleaning, g.c. can change
physical position of the objects. If g.c. changes
position of an object the pointer will point at
wrong place in memory. To avoid such
problems (connected with garbage collector)
C# contains 'fixed' keyword. It informs system
not to relocate an object by the garbage
collector.
•
•
•
•

using System;
class Test {
public int num;
public Test(int i) { num = i; }

•}
• class FixedCode {
• // Mark Main as unsafe.
• unsafe static void Main() {
Test o = new Test(19);
fixed (int* p = &o.num) {
Console.WriteLine("Initial value of o.num is " + *p);
*p = 10;
Console.WriteLine("New value of o.num is " + *p);
} }
• fixed prevents o from being moved. Because p
points to o.num , if o were moved, then p
would point to an invalid location.

Mais conteúdo relacionado

Mais procurados

computer notes - Conversion from infix to postfix
computer notes - Conversion from infix to postfixcomputer notes - Conversion from infix to postfix
computer notes - Conversion from infix to postfix
ecomputernotes
 
Csc1100 lecture02 ch02-datatype_declaration
Csc1100 lecture02 ch02-datatype_declarationCsc1100 lecture02 ch02-datatype_declaration
Csc1100 lecture02 ch02-datatype_declaration
IIUM
 
C programming session 04
C programming session 04C programming session 04
C programming session 04
AjayBahoriya
 
Chapter 2 - Structure of C++ Program
Chapter 2 - Structure of C++ ProgramChapter 2 - Structure of C++ Program
Chapter 2 - Structure of C++ Program
Deepak Singh
 

Mais procurados (20)

Lab 1
Lab 1Lab 1
Lab 1
 
Infix-Postfix expression conversion
Infix-Postfix expression conversionInfix-Postfix expression conversion
Infix-Postfix expression conversion
 
Infix postfixcoversion
Infix postfixcoversionInfix postfixcoversion
Infix postfixcoversion
 
Evaluation of postfix expression
Evaluation of postfix expressionEvaluation of postfix expression
Evaluation of postfix expression
 
How c program execute in c program
How c program execute in c program How c program execute in c program
How c program execute in c program
 
computer notes - Conversion from infix to postfix
computer notes - Conversion from infix to postfixcomputer notes - Conversion from infix to postfix
computer notes - Conversion from infix to postfix
 
Infix to Postfix Conversion Using Stack
Infix to Postfix Conversion Using StackInfix to Postfix Conversion Using Stack
Infix to Postfix Conversion Using Stack
 
Infix to postfix
Infix to postfixInfix to postfix
Infix to postfix
 
Csc1100 lecture02 ch02-datatype_declaration
Csc1100 lecture02 ch02-datatype_declarationCsc1100 lecture02 ch02-datatype_declaration
Csc1100 lecture02 ch02-datatype_declaration
 
Programming fundamentals
Programming fundamentalsProgramming fundamentals
Programming fundamentals
 
Infix to postfix conversion
Infix to postfix conversionInfix to postfix conversion
Infix to postfix conversion
 
LLVM Overview
LLVM OverviewLLVM Overview
LLVM Overview
 
A simple program C# program
A simple program C# programA simple program C# program
A simple program C# program
 
3. user input and some basic problem
3. user input and some basic problem3. user input and some basic problem
3. user input and some basic problem
 
C# 5.0
C# 5.0C# 5.0
C# 5.0
 
2. introduction of a c program
2. introduction of a c program2. introduction of a c program
2. introduction of a c program
 
Two C++ Tools: Compiler Explorer and Cpp Insights
Two C++ Tools: Compiler Explorer and Cpp InsightsTwo C++ Tools: Compiler Explorer and Cpp Insights
Two C++ Tools: Compiler Explorer and Cpp Insights
 
Conversion of Infix to Prefix and Postfix with Stack
Conversion of Infix to Prefix and Postfix with StackConversion of Infix to Prefix and Postfix with Stack
Conversion of Infix to Prefix and Postfix with Stack
 
C programming session 04
C programming session 04C programming session 04
C programming session 04
 
Chapter 2 - Structure of C++ Program
Chapter 2 - Structure of C++ ProgramChapter 2 - Structure of C++ Program
Chapter 2 - Structure of C++ Program
 

Destaque (8)

Generics C#
Generics C#Generics C#
Generics C#
 
Delegates and events
Delegates and eventsDelegates and events
Delegates and events
 
C# Generics
C# GenericsC# Generics
C# Generics
 
C# Delegates, Events, Lambda
C# Delegates, Events, LambdaC# Delegates, Events, Lambda
C# Delegates, Events, Lambda
 
C# Delegates
C# DelegatesC# Delegates
C# Delegates
 
Delegates and events
Delegates and events   Delegates and events
Delegates and events
 
Threading in C#
Threading in C#Threading in C#
Threading in C#
 
12 events and delegates
12   events and delegates12   events and delegates
12 events and delegates
 

Semelhante a Unsafe

Presentation 5th
Presentation 5thPresentation 5th
Presentation 5th
Connex
 
Inline function
Inline functionInline function
Inline function
Tech_MX
 

Semelhante a Unsafe (20)

#Code2 create c++ for beginners
#Code2 create  c++ for beginners #Code2 create  c++ for beginners
#Code2 create c++ for beginners
 
POLITEKNIK MALAYSIA
POLITEKNIK MALAYSIAPOLITEKNIK MALAYSIA
POLITEKNIK MALAYSIA
 
Introduction Of C++
Introduction Of C++Introduction Of C++
Introduction Of C++
 
MCA 101-Programming in C with Data Structure UNIT I by Prof. Rohit Dubey
MCA 101-Programming in C with Data Structure UNIT I by Prof. Rohit DubeyMCA 101-Programming in C with Data Structure UNIT I by Prof. Rohit Dubey
MCA 101-Programming in C with Data Structure UNIT I by Prof. Rohit Dubey
 
C language
C languageC language
C language
 
POLITEKNIK MALAYSIA
POLITEKNIK MALAYSIAPOLITEKNIK MALAYSIA
POLITEKNIK MALAYSIA
 
Lecture1
Lecture1Lecture1
Lecture1
 
Presentation 5th
Presentation 5thPresentation 5th
Presentation 5th
 
2.Getting Started with C#.Net-(C#)
2.Getting Started with C#.Net-(C#)2.Getting Started with C#.Net-(C#)
2.Getting Started with C#.Net-(C#)
 
C++ Training
C++ TrainingC++ Training
C++ Training
 
C_plus_plus
C_plus_plusC_plus_plus
C_plus_plus
 
Chap 5 c++
Chap 5 c++Chap 5 c++
Chap 5 c++
 
Programming using c++ tool
Programming using c++ toolProgramming using c++ tool
Programming using c++ tool
 
Pointers
PointersPointers
Pointers
 
The Ring programming language version 1.5.4 book - Part 82 of 185
The Ring programming language version 1.5.4 book - Part 82 of 185The Ring programming language version 1.5.4 book - Part 82 of 185
The Ring programming language version 1.5.4 book - Part 82 of 185
 
Embedded _c_
Embedded  _c_Embedded  _c_
Embedded _c_
 
Lap trinh C co ban va nang cao
Lap trinh C co ban va nang caoLap trinh C co ban va nang cao
Lap trinh C co ban va nang cao
 
Inline function
Inline functionInline function
Inline function
 
Learning C++ - Introduction to c++ programming 1
Learning C++ - Introduction to c++ programming 1Learning C++ - Introduction to c++ programming 1
Learning C++ - Introduction to c++ programming 1
 
CPP03 - Repetition
CPP03 - RepetitionCPP03 - Repetition
CPP03 - Repetition
 

Mais de abhay singh (15)

Iso 27001
Iso 27001Iso 27001
Iso 27001
 
Web service
Web serviceWeb service
Web service
 
Threading
ThreadingThreading
Threading
 
Preprocessor
PreprocessorPreprocessor
Preprocessor
 
Networking and socket
Networking and socketNetworking and socket
Networking and socket
 
Namespace
NamespaceNamespace
Namespace
 
Inheritance
InheritanceInheritance
Inheritance
 
Generic
GenericGeneric
Generic
 
Gdi
GdiGdi
Gdi
 
Exception
ExceptionException
Exception
 
Delegate
DelegateDelegate
Delegate
 
Constructor
ConstructorConstructor
Constructor
 
Collection
CollectionCollection
Collection
 
Ado
AdoAdo
Ado
 
Operator overloading
Operator overloadingOperator overloading
Operator overloading
 

Último

Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdfVishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
ssuserdda66b
 

Último (20)

Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)
 
Spatium Project Simulation student brief
Spatium Project Simulation student briefSpatium Project Simulation student brief
Spatium Project Simulation student brief
 
Graduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - EnglishGraduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - English
 
Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptx
 
Dyslexia AI Workshop for Slideshare.pptx
Dyslexia AI Workshop for Slideshare.pptxDyslexia AI Workshop for Slideshare.pptx
Dyslexia AI Workshop for Slideshare.pptx
 
Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdfVishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17
 
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfHoldier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdf
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibit
 
Understanding Accommodations and Modifications
Understanding  Accommodations and ModificationsUnderstanding  Accommodations and Modifications
Understanding Accommodations and Modifications
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptx
 
On National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsOn National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan Fellows
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POS
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
 
Python Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docxPython Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docx
 
This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.This PowerPoint helps students to consider the concept of infinity.
This PowerPoint helps students to consider the concept of infinity.
 
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
 
SOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning PresentationSOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning Presentation
 

Unsafe

  • 2. • Unsafe code often involves the use of pointers. • Unsafe code and pointers enable C# to be used to create applications that one might normally associate with C++: highperformance, systems code. • the inclusion of unsafe code and pointers gives C# capabilities that are lacking in Java.
  • 3. • Unsafe code is not code that is poorly written; it is code that does not execute under the full management of the common language runtime (CLR). • C# is normally used to create managed code. • It is possible, however, to write code that does not execute under the full control of the CLR. This unmanaged code is not subject to the same controls and constraints as managed code, so it is called “unsafe”. • it is not possible to verify that it won’t perform some type of harmful action.
  • 4. • Because a pointer can point anywhere in memory, it is possible to misuse a pointer. • It is also easy to introduce a coding error when using pointers. This is why C# does not support pointers when creating managed code. • C# does allow you to create and use pointers. However, all pointer operations must be marked as unsafe since they execute outside the managed context.
  • 5. Declaring a Pointer • Pointer variables must be declared as such. type * var-name ; • type is the pointer’s referent type. • var-name is the name of the pointer variable. • example. To declare ip to be a pointer to an int, use this declaration: int* ip;
  • 6. • If you come from a C/C++ background, then you need to be aware of an important difference between the way C# and C/C++ declare pointers. • When you declare a pointer type in C/C++, the * is not distributive over a list of variables in a declaration. • Thus, in C/C++, this statement int* p, q;
  • 7. • in C#, the * is distributive and the declaration int* p, q; • creates two pointer variables. • Thus, in C# it is the same as these two declarations: int* p; int* q;
  • 8. • Two operators are used with pointers: * and &. • The & is a unary operator that returns the memory address of its operand. • int* ip; • int num = 10; • ip = # • puts into ip the memory address of the variable num. • ip does not contain the value 10.
  • 9. • The second operator is *, and it is the complement of &. • it refers to the value of the variable pointed to by a pointer. • ip = # • int val = *ip; • will place into val the value 10, which is the value of num, which is pointed to by ip .
  • 10. unsafe • Any code that uses pointers must be marked as unsafe by using the unsafe keyword. • You can mark types (such as classes and structures), members (such as methods and operators), or individual blocks of code as unsafe. • using System; • class UnsafeCode {
  • 11. // Mark Main as unsafe. unsafe static void Main() { int count = 99; int* p; // create an int pointer p = &count; // put address of count into p Console.WriteLine("Initial value of count is " +*p); *p = 10; // assign 10 to count via p Console.WriteLine("New value of count is " + *p); }}
  • 12. Using fixed • The fixed keyword can be used only in an unsafe context. • The fixed modifier is often used when working with pointers. • It prevents a variable from being moved by the garbage collector. • This is needed when a pointer refers to a field in a class object.
  • 13. • Using pointers in C# require much more attention then in C++. That is because of garbage collector (g.c.) which can run memory cleaning. During cleaning, g.c. can change physical position of the objects. If g.c. changes position of an object the pointer will point at wrong place in memory. To avoid such problems (connected with garbage collector) C# contains 'fixed' keyword. It informs system not to relocate an object by the garbage collector.
  • 14. • • • • using System; class Test { public int num; public Test(int i) { num = i; } •} • class FixedCode { • // Mark Main as unsafe. • unsafe static void Main() {
  • 15. Test o = new Test(19); fixed (int* p = &o.num) { Console.WriteLine("Initial value of o.num is " + *p); *p = 10; Console.WriteLine("New value of o.num is " + *p); } } • fixed prevents o from being moved. Because p points to o.num , if o were moved, then p would point to an invalid location.