SlideShare a Scribd company logo
1 of 61
C++ 프로그래머를 위한 C#
㈜넥슨
신규개발3본부 개발1실 GTR팀 성능연구유닛
김재석
책임연구원
2010/2011, 마비노기2
2006/2009, 마비노기 영웅전
테크니컬 디렉터
2004/2005, 마비노기
2003/2004, 프로젝트 T2
2001/2003, Oz World
[ɡ̊ɪm̚ ʨæːsɤk̚]
/ɡim ɟɛːzʌɡ/
Agenda
Visual Studio .NET Rainer
.NET Framework 1.0 C# 1.0
Visual Studio .NET 2003 Everett
.NET Framework 1.1, C# 1.2
Visual Studio 2005 Whidbey
.NET Framework 2.0, C# 2,0
.NET Framework 3.0 WinFX
Visual Studio 2008 Orcas
.NET Framework 3.5, C# 3.0
Visual Studio 2010 Dev10
.NET Framework 4.0, C# 4.0
Reactive Extensions for .NET Framework 3.5 SP1
Visual Studio .NET Rainer
.NET Framework 1.0 / C# 1.0
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
C# 1.0 – Managed Code
Common Type System
Classes
Structures
Enumerations
Interfaces
Delegates
Attributes
Directives
Visual Studio® .NET
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Common Type System
Primitive Types
Field
Method
Property
Event
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Primitive Types
Byte
Int16
Int32
Int64
Single
Double
Boolean
Char
Decimal
IntPtr
String
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Field
// C#
const int constant = 0;
readonly int readOnlyField;
// C++
static const int constant = 0;
const int readOnlyField;
mutable int mutableField;
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Field (cont.)
Field ≠ variable
default(T) if not initialized
• null if reference type
• 0 if value type
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Method
Member function with CV-qualifier
class Object
{
public:
String ToString() const
{
return const_cast<Object*>(this)
->ToString();
}
virtual String ToString();
};
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Method (cont.)
// C#
void CallByRef(ref int value);
bool TryGetValue(out int value);
// C++
void CallByRef(int& value);
bool TryGetValue(/*out*/int& value);
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Property
Get Method/Set Method ≠ reference to type
// C#
variable = obj.PropertyName;
obj.PropertyName = value
// C++
variable = obj->get_PropertyName();
obj->setPropertyName(value);
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Property (cont.)
Indexed property ≠ index operator []
int this[int index]
{
get { return array[index]; }
set { array[index] = value; }
}
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Property (cont.)
Implementation: lazy evaluation class
class Property<typename T>
{
operator T() const;
Property& operator=(const T&
value);
Property& operator=(const
Property& value);
};
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Property (cont.)
VC 7.1 or higher: property extended storage-
class modifier
virtual TypeName get_PropertyName();
virtual void set_PropertyName(const
TypeName& value);
__declspec(property(get=get_Property
Name, put=set_PropertyName))
TypeName PropertyName;
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Event
Multicast delegate
// C#
obj.EventName += someDelegate;
obj.EventName -= someDelegate;
if (obj.EventName != null) obj.EventName();
// C++
obj->add_EventName(someDelegate);
obj->remove_EventName(someDelegate);
obj->raise_EventName();
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Classes
Finalizer ≠ destructor
GC.ReRegisterForFinalize(this);
GC.SuppressFinalize(this);
// C#
GC.KeepAlive(value);
// C++
Pointer<Object> keepAlive(value);
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Classes (cont.)
Prevent R6025 – Pure virtual function call
__forceinline void Release()
{
if (--referenceCounter == 0)
{
Finalize();
delete this;
}
}
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Classes (cont.)
Type initializer a.k.a. static constructor
namespace
{
class Static : … ;
Pointer<Static> _static;
}
…
if (_static == NULL)
{
_static.CompareExchange(Pointer<Static>(
new Static), Pointer<Static>(NULL));
}
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Classes (cont.)
Sealed class
template <typename T>
class Sealed
{
private:
friend typename T;
Sealed() { }
~Sealed() { }
};
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Structures
Lightweight – Value types
Default constructor / finalizer
• NEVER let contain unmanaged resources
Expert only
• Box/Unbox cost
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Enumerations
Value types
string[] Enum.GetNames()
TEnum[] Enum.GetValues()
TEnum Enum.Parse(string s)
bool Enum.TryParse(
string s, out TEnum @enum)
TEnum TEnum.MaxValue { get; }
TEnum TEnum.MinValue { get; }
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Interfaces
Virtual inheritance
template <>
class Task<void> : public Object,
public virtual IAsyncResult,
public virtual IDisposable
{
…
};
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Delegates
Closures or managed functors
Calling conventions:
• cdecl
• stdcall
• fastcall
• thiscall
• function object
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Delegates (cont.)
#define DEFINE_DELEGATE(TPARAMS, PARAMS,
ARGS)
template <typename TResult TPARAMS>
class delegate<TResult(PARAMS)> …
#define DELEGATE_TPARAMS , typename T1
#define DELEGATE_PARAMS T1 arg1
#define DELEGATE_ARGS arg1
DEFINE_DELEGATE(DELEGATE_TPARAMS,
DELEGATE_PARAMS, DELEGATE_ARGS);
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Attributes
template <typename T>
class CustomAttribute
{
public:
static const int get_Value() { return
value; }
private:
static int value;
};
#define CUSTOM_ATTRIBUTE(Type, _v) 
int CustomAttribute<Type>::value = _v
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Directives
using directive (C#) ≈ using directive (C++)
Assemblies are referenced.
#include directive (C++)
package / import declarations (Java)
#define directive
defines a symbol
assigns a value to a symbol
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Visual Studio .NET 2003 Everett
.NET Framework 1.1 / C# 1.2
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
C# 1.2 – Bug Fix
IDisposable interface
• IEnumerator interface
foreach (object obj in collection)
// TEnumerator enumerator =
// collection.GetEnumerator();
{
}
// if (enumerator is IDisposable)
// enumerator.Dispose();
Visual Studio® .NET 2003
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Visual Studio 2005 Whidbey
.NET Framework 2.0 / C# 2.0
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
C# 2.0 – Generic
Generics
Iterators
Partial Classes
Nullable Types
Anonymous Methods
Static Classes
Property Accessor Accessibilities
Delegates
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Visual Studio® 2005
Generics
System.Collections.Generic
• List<T> std::vector<T>
• Queue<T> std::queue<T>
• Stack<T> std::stack<T>
• LinkedList<T> std::list<T>
• Dictionary<TKey, TValue>
std::map<Key, T>
• HashSet<T> std::set<T>
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Iterators
IEnumerable<T> Where<T>(
IEnumerable<T> source,
Func<T, bool> predicate)
{
if (source == null) yield break;
foreach (T value in source)
{
if (!predicate(value)) continue;
yield return value;
}
}
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Partial Classes
// Generated.Designer.cs
[CLSCompliant]
partial class Generated : ICloneable
{ … }
// Generated.cs
[Serializable]
partial class Generated : IDisposable
{ … }
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Nullable Types
Nullable<T> where T : struct
Coalescing operator ??
int? nullable = null;
int value = nullable ??
default(int);
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Anonymous Methods
// C# 2.0
Func<Type, bool> predicate =
// nested type in C# 1.2
delegate(Type value)
{
return value == default(Type);
};
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Static Classes
Classes which are both abstract and sealed.
public static class Helper
{
public static int GetHash(object obj)
{
return obj.GetHashCode();
}
}
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Property Accessor
Accessibilities
// C# 1.2
public Type PropertyName
{ get { return field; } }
internal void SetPropertyName(Type value)
{ fieldName = value; }
// C# 2.0
public Type PropertyName
{
get { return fieldName; }
internal set { fieldName = value; }
}
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Delegates
string Covariance() …
Func<object> function =
new Func<object>(Covariance);
void Contravariance(object arg);
Action<string> action =
new Action<string>(
Contravariance);
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Delegates (cont.)
// C# 1.2
Action action =
new Action(obj.MethodName);
// C# 2.0
Action action = obj.MethodName;
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Visual Studio 2008 Orcas
.NET Framework 3.5 / C# 3.0
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
C# 3.0 – LINQ
Implicitly Type Local Variables and Arrays
Object Initializers
Collection Initializers
Extension Methods
Anonymous Types
Lambda Expressions
Query Keywords
Auto-Implemented Properties
Partial Method Definitions
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Visual Studio® 2008
Implicitly Type Local
Variables and Arrays
// C# 2.0
Dictionary<string, object> dict =
new Dictionary<string, object>();
Type[] types = new Type[]
{ typeof(int) };
// C# 3.0
var dict =
new Dictionary<string, object>();
var types = new[] { typeof(int) };
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Object Initializers
// C# 2.0
SomeKeyValue pair = new SomeKeyValue();
value.Name = “anonymous”;
value.Value = null;
// C# 3.0
var value = new SomeKeyValue()
{
Name = “anonymous”,
Value = null,
};
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Collection Initializers
// C# 2.0
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
// C# 3.0
var list = new List<int> { 1, 2 };
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Extension Methods
static class ComponentExtensions
{
static void DoSomething(
this IComponent component,
T arg) { … }
}
ComponentExtensions.Do(component, arg);
component.DoSomething(arg);
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Anonymous Types
foreach (var value in from row in table
select new
{
Type = row.GetType(),
Hash = row.GetHashCode(),
})
{
Console.WriteLine(“{{ Type = {0}, Hash = {1} }}”,
value.Type, value.Hash);
Console.WriteLine(value);
}
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Lambda Expressions
// C# 2.0
Func<Type, bool> predicate =
delegate(Type value)
{
return value == default(Type);
};
// C# 3.0
Func<Type, bool> predicate =
value => value == default(Type);
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Query Keywords
var q = from c in categories
join p in products
on c.ID equals p.CID
orderby c.ID,
p.Price descending
group p.Price by c.ID into g
let cid = g.Key
where Predicate(cid)
select g.Average();
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Query Keywords (cont.)
var q = categories
.Join(products,
c => c.ID, p => p.CID,
(c, p) =>
new { c = c, p = p })
.OrderBy(_ => _.c.ID)
.ThenByDescending(_ => _.p.Price)
.GroupBy(_ => _.c.ID, _.p.Price)
.Select(g =>
new { g = g, cid = g.Key })
.Where(_ => Predicate(_.cid))
.Select(_ => _.g.Average());
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Auto-Implemented
Properties
// C# 2.0
public Type PropertyName
{
get { return fieldName; }
internal set { fieldName = value; }
}
// C# 3.0
public Type PropertyName
{ get; internal set; }
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Partial Method
Definitions
// Generated.Designer.cs
partial class Generated
{
Generated() { OnInitialized(); }
partial void OnInitialized();
}
// Generated.cs
partial class Generated
{
partial void OnInitialized() { … }
}
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Reactive Extensions for .NET Framework 3.5 SP1
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
More LINQ with System.Interactive – Getting Started by Bart De Smet
Reactive Extensions
Task Parallel Library ∈ .NET Framework 4.0
Observer Design Pattern
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Task Parallel Library
System.Collections.Concurrent
• ConcurrentBag<T>
tbb::concurrent_vector<T>
• ConcurrentQueue<T>
tbb::concurrent_queue<T>
• ConcurrentStack<T>
tbb::concurrent_stack<T>
• ConcurrentDictionary<TKey, TValue>
tbb::concurrent_hash_map<Key, T>
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Task Parallel Library
(cont.)
System.Threading.Tasks
// C# 3.0
ThreadPool.QueueUserWorkItem(
callback, state);
// C# 4.0 or Rx
Task.Factory.StartNew(
action, state);
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Observer Design Pattern
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
More LINQ with System.Interactive – Getting Started by Bart De Smet
Observer Design Pattern
(Further reading)
Duality of IEnumerable<T> / IObservable<T>
Reactive Framework Finally Explained
More LINQ with System.Interactive series
VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
Q&A

More Related Content

What's hot

Better Code: Concurrency
Better Code: ConcurrencyBetter Code: Concurrency
Better Code: ConcurrencyPlatonov Sergey
 
Introduction to web programming for java and c# programmers by @drpicox
Introduction to web programming for java and c# programmers by @drpicoxIntroduction to web programming for java and c# programmers by @drpicox
Introduction to web programming for java and c# programmers by @drpicoxDavid Rodenas
 
C# for-java-developers
C# for-java-developersC# for-java-developers
C# for-java-developersDhaval Dalal
 
One Year of Clean Architecture - The Good, The Bad and The Bob
One Year of Clean Architecture - The Good, The Bad and The BobOne Year of Clean Architecture - The Good, The Bad and The Bob
One Year of Clean Architecture - The Good, The Bad and The BobOCTO Technology
 
Java PRACTICAL file
Java PRACTICAL fileJava PRACTICAL file
Java PRACTICAL fileRACHIT_GUPTA
 
SoCal Code Camp 2015: An introduction to Java 8
SoCal Code Camp 2015: An introduction to Java 8SoCal Code Camp 2015: An introduction to Java 8
SoCal Code Camp 2015: An introduction to Java 8Chaitanya Ganoo
 
Navigating the xDD Alphabet Soup
Navigating the xDD Alphabet SoupNavigating the xDD Alphabet Soup
Navigating the xDD Alphabet SoupDror Helper
 
C++ Interface Versioning
C++ Interface VersioningC++ Interface Versioning
C++ Interface VersioningSkills Matter
 
How Data Flow analysis works in a static code analyzer
How Data Flow analysis works in a static code analyzerHow Data Flow analysis works in a static code analyzer
How Data Flow analysis works in a static code analyzerAndrey Karpov
 
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...Sergey Platonov
 
C++aptitude questions and answers
C++aptitude questions and answersC++aptitude questions and answers
C++aptitude questions and answerssheibansari
 
Constructors and destructors
Constructors and destructorsConstructors and destructors
Constructors and destructorsVineeta Garg
 
2006 Small Scheme
2006 Small Scheme2006 Small Scheme
2006 Small Schemebergel
 
PVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error ExamplesPVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error ExamplesAndrey Karpov
 

What's hot (20)

Better Code: Concurrency
Better Code: ConcurrencyBetter Code: Concurrency
Better Code: Concurrency
 
Introduction to web programming for java and c# programmers by @drpicox
Introduction to web programming for java and c# programmers by @drpicoxIntroduction to web programming for java and c# programmers by @drpicox
Introduction to web programming for java and c# programmers by @drpicox
 
C++ aptitude
C++ aptitudeC++ aptitude
C++ aptitude
 
C# for-java-developers
C# for-java-developersC# for-java-developers
C# for-java-developers
 
One Year of Clean Architecture - The Good, The Bad and The Bob
One Year of Clean Architecture - The Good, The Bad and The BobOne Year of Clean Architecture - The Good, The Bad and The Bob
One Year of Clean Architecture - The Good, The Bad and The Bob
 
Enter the gradle
Enter the gradleEnter the gradle
Enter the gradle
 
Java PRACTICAL file
Java PRACTICAL fileJava PRACTICAL file
Java PRACTICAL file
 
SoCal Code Camp 2015: An introduction to Java 8
SoCal Code Camp 2015: An introduction to Java 8SoCal Code Camp 2015: An introduction to Java 8
SoCal Code Camp 2015: An introduction to Java 8
 
Navigating the xDD Alphabet Soup
Navigating the xDD Alphabet SoupNavigating the xDD Alphabet Soup
Navigating the xDD Alphabet Soup
 
C++ Interface Versioning
C++ Interface VersioningC++ Interface Versioning
C++ Interface Versioning
 
How Data Flow analysis works in a static code analyzer
How Data Flow analysis works in a static code analyzerHow Data Flow analysis works in a static code analyzer
How Data Flow analysis works in a static code analyzer
 
Object Oriented Programming using C++ - Part 5
Object Oriented Programming using C++ - Part 5Object Oriented Programming using C++ - Part 5
Object Oriented Programming using C++ - Part 5
 
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
 
Object Oriented Programming using C++ - Part 1
Object Oriented Programming using C++ - Part 1Object Oriented Programming using C++ - Part 1
Object Oriented Programming using C++ - Part 1
 
Java basic understand OOP
Java basic understand OOPJava basic understand OOP
Java basic understand OOP
 
C++aptitude questions and answers
C++aptitude questions and answersC++aptitude questions and answers
C++aptitude questions and answers
 
Object Oriented Programming using C++ - Part 3
Object Oriented Programming using C++ - Part 3Object Oriented Programming using C++ - Part 3
Object Oriented Programming using C++ - Part 3
 
Constructors and destructors
Constructors and destructorsConstructors and destructors
Constructors and destructors
 
2006 Small Scheme
2006 Small Scheme2006 Small Scheme
2006 Small Scheme
 
PVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error ExamplesPVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error Examples
 

Viewers also liked

NDC 2014, 피할 수 없는 문자열의 세계
NDC 2014, 피할 수 없는 문자열의 세계NDC 2014, 피할 수 없는 문자열의 세계
NDC 2014, 피할 수 없는 문자열의 세계tcaesvk
 
Preprocessor Programming
Preprocessor ProgrammingPreprocessor Programming
Preprocessor Programminglactrious
 
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기Wonha Ryu
 
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점Wonha Ryu
 
김재석, 패킷 지옥으로부터 탈출, NDC2010
김재석, 패킷 지옥으로부터 탈출, NDC2010김재석, 패킷 지옥으로부터 탈출, NDC2010
김재석, 패킷 지옥으로부터 탈출, NDC2010devCAT Studio, NEXON
 
월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전 기법 세미나, C++ 게임 개발자를 위한 C# 활용기법
월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전 기법 세미나, C++ 게임 개발자를 위한 C# 활용기법월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전 기법 세미나, C++ 게임 개발자를 위한 C# 활용기법
월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전 기법 세미나, C++ 게임 개발자를 위한 C# 활용기법tcaesvk
 
NDC 2012, Gamification 001: 실전 감량 사례로 알아보는 메카닉
NDC 2012, Gamification 001: 실전 감량 사례로 알아보는 메카닉NDC 2012, Gamification 001: 실전 감량 사례로 알아보는 메카닉
NDC 2012, Gamification 001: 실전 감량 사례로 알아보는 메카닉tcaesvk
 
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서tcaesvk
 
NDC 2010, 패킷 지옥으로부터 탈출
NDC 2010, 패킷 지옥으로부터 탈출NDC 2010, 패킷 지옥으로부터 탈출
NDC 2010, 패킷 지옥으로부터 탈출tcaesvk
 
C# Game Server
C# Game ServerC# Game Server
C# Game Serverlactrious
 
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)Sang Don Kim
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
[NDC] 인디 게임 개발사의 콘솔도전기
[NDC] 인디 게임 개발사의 콘솔도전기[NDC] 인디 게임 개발사의 콘솔도전기
[NDC] 인디 게임 개발사의 콘솔도전기Seokho Lee
 
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부Eunseok Yi
 
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템tcaesvk
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기Wonha Ryu
 
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지Kwangyoung Lee
 
공성대전 C# 사용기
공성대전 C# 사용기공성대전 C# 사용기
공성대전 C# 사용기Myoung-gyu Gang
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해Nam Hyeonuk
 

Viewers also liked (20)

NDC 2014, 피할 수 없는 문자열의 세계
NDC 2014, 피할 수 없는 문자열의 세계NDC 2014, 피할 수 없는 문자열의 세계
NDC 2014, 피할 수 없는 문자열의 세계
 
Preprocessor Programming
Preprocessor ProgrammingPreprocessor Programming
Preprocessor Programming
 
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
 
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
현업 엔지니어의 시각에서 본 알고리즘 공부의 장점과 단점
 
김재석, 패킷 지옥으로부터 탈출, NDC2010
김재석, 패킷 지옥으로부터 탈출, NDC2010김재석, 패킷 지옥으로부터 탈출, NDC2010
김재석, 패킷 지옥으로부터 탈출, NDC2010
 
월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전 기법 세미나, C++ 게임 개발자를 위한 C# 활용기법
월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전 기법 세미나, C++ 게임 개발자를 위한 C# 활용기법월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전 기법 세미나, C++ 게임 개발자를 위한 C# 활용기법
월간 마이크로소프트웨어 창간 28주년 기념 C++ 개발자를 위한 게임 프로그래밍 실전 기법 세미나, C++ 게임 개발자를 위한 C# 활용기법
 
NDC 2012, Gamification 001: 실전 감량 사례로 알아보는 메카닉
NDC 2012, Gamification 001: 실전 감량 사례로 알아보는 메카닉NDC 2012, Gamification 001: 실전 감량 사례로 알아보는 메카닉
NDC 2012, Gamification 001: 실전 감량 사례로 알아보는 메카닉
 
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
NDC 2011, 네트워크 비동기 통신, 합의점의 길목에서
 
NDC 2010, 패킷 지옥으로부터 탈출
NDC 2010, 패킷 지옥으로부터 탈출NDC 2010, 패킷 지옥으로부터 탈출
NDC 2010, 패킷 지옥으로부터 탈출
 
C# Game Server
C# Game ServerC# Game Server
C# Game Server
 
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
[NDC] 인디 게임 개발사의 콘솔도전기
[NDC] 인디 게임 개발사의 콘솔도전기[NDC] 인디 게임 개발사의 콘솔도전기
[NDC] 인디 게임 개발사의 콘솔도전기
 
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부
NDC 2010 이은석 - 마비노기 영웅전 포스트모템 1부
 
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
 
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
 
공성대전 C# 사용기
공성대전 C# 사용기공성대전 C# 사용기
공성대전 C# 사용기
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해
 

Similar to NDC 2011, C++ 프로그래머를 위한 C#

Visual studio 2008
Visual studio 2008Visual studio 2008
Visual studio 2008Luis Enrique
 
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningJava 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningCarol McDonald
 
Core2 Document - Java SCORE Overview.pptx.pdf
Core2 Document - Java SCORE Overview.pptx.pdfCore2 Document - Java SCORE Overview.pptx.pdf
Core2 Document - Java SCORE Overview.pptx.pdfThchTrngGia
 
The craft of meta programming on JVM
The craft of meta programming on JVMThe craft of meta programming on JVM
The craft of meta programming on JVMIgor Khotin
 
Applying Compiler Techniques to Iterate At Blazing Speed
Applying Compiler Techniques to Iterate At Blazing SpeedApplying Compiler Techniques to Iterate At Blazing Speed
Applying Compiler Techniques to Iterate At Blazing SpeedPascal-Louis Perez
 
Attributes & .NET components
Attributes & .NET componentsAttributes & .NET components
Attributes & .NET componentsBình Trọng Án
 
HexRaysCodeXplorer: object oriented RE for fun and profit
HexRaysCodeXplorer: object oriented RE for fun and profitHexRaysCodeXplorer: object oriented RE for fun and profit
HexRaysCodeXplorer: object oriented RE for fun and profitAlex Matrosov
 
What’s new in .NET
What’s new in .NETWhat’s new in .NET
What’s new in .NETDoommaker
 
Introduction to Client-Side Javascript
Introduction to Client-Side JavascriptIntroduction to Client-Side Javascript
Introduction to Client-Side JavascriptJulie Iskander
 
Linq 1224887336792847 9
Linq 1224887336792847 9Linq 1224887336792847 9
Linq 1224887336792847 9google
 
TypeScript for Java Developers
TypeScript for Java DevelopersTypeScript for Java Developers
TypeScript for Java DevelopersYakov Fain
 
Visual Studio 2010 and .NET 4.0 Overview
Visual Studio 2010 and .NET 4.0 OverviewVisual Studio 2010 and .NET 4.0 Overview
Visual Studio 2010 and .NET 4.0 Overviewbwullems
 
MiamiJS - The Future of JavaScript
MiamiJS - The Future of JavaScriptMiamiJS - The Future of JavaScript
MiamiJS - The Future of JavaScriptCaridy Patino
 
Executing Sql Commands
Executing Sql CommandsExecuting Sql Commands
Executing Sql Commandsphanleson
 

Similar to NDC 2011, C++ 프로그래머를 위한 C# (20)

Visual studio 2008
Visual studio 2008Visual studio 2008
Visual studio 2008
 
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, TuningJava 5 6 Generics, Concurrency, Garbage Collection, Tuning
Java 5 6 Generics, Concurrency, Garbage Collection, Tuning
 
Core2 Document - Java SCORE Overview.pptx.pdf
Core2 Document - Java SCORE Overview.pptx.pdfCore2 Document - Java SCORE Overview.pptx.pdf
Core2 Document - Java SCORE Overview.pptx.pdf
 
Java Generics
Java GenericsJava Generics
Java Generics
 
The craft of meta programming on JVM
The craft of meta programming on JVMThe craft of meta programming on JVM
The craft of meta programming on JVM
 
Linq intro
Linq introLinq intro
Linq intro
 
Applying Compiler Techniques to Iterate At Blazing Speed
Applying Compiler Techniques to Iterate At Blazing SpeedApplying Compiler Techniques to Iterate At Blazing Speed
Applying Compiler Techniques to Iterate At Blazing Speed
 
Attributes & .NET components
Attributes & .NET componentsAttributes & .NET components
Attributes & .NET components
 
HexRaysCodeXplorer: object oriented RE for fun and profit
HexRaysCodeXplorer: object oriented RE for fun and profitHexRaysCodeXplorer: object oriented RE for fun and profit
HexRaysCodeXplorer: object oriented RE for fun and profit
 
What’s new in .NET
What’s new in .NETWhat’s new in .NET
What’s new in .NET
 
Introduction to Client-Side Javascript
Introduction to Client-Side JavascriptIntroduction to Client-Side Javascript
Introduction to Client-Side Javascript
 
Linq 1224887336792847 9
Linq 1224887336792847 9Linq 1224887336792847 9
Linq 1224887336792847 9
 
TypeScript for Java Developers
TypeScript for Java DevelopersTypeScript for Java Developers
TypeScript for Java Developers
 
Visual Studio 2010 and .NET 4.0 Overview
Visual Studio 2010 and .NET 4.0 OverviewVisual Studio 2010 and .NET 4.0 Overview
Visual Studio 2010 and .NET 4.0 Overview
 
Greg Demo Slides
Greg Demo SlidesGreg Demo Slides
Greg Demo Slides
 
Managed Compiler
Managed CompilerManaged Compiler
Managed Compiler
 
Java gets a closure
Java gets a closureJava gets a closure
Java gets a closure
 
Bw14
Bw14Bw14
Bw14
 
MiamiJS - The Future of JavaScript
MiamiJS - The Future of JavaScriptMiamiJS - The Future of JavaScript
MiamiJS - The Future of JavaScript
 
Executing Sql Commands
Executing Sql CommandsExecuting Sql Commands
Executing Sql Commands
 

Recently uploaded

WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 

Recently uploaded (20)

WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 

NDC 2011, C++ 프로그래머를 위한 C#

  • 1. C++ 프로그래머를 위한 C# ㈜넥슨 신규개발3본부 개발1실 GTR팀 성능연구유닛 김재석
  • 2.
  • 3.
  • 4. 책임연구원 2010/2011, 마비노기2 2006/2009, 마비노기 영웅전 테크니컬 디렉터 2004/2005, 마비노기 2003/2004, 프로젝트 T2 2001/2003, Oz World [ɡ̊ɪm̚ ʨæːsɤk̚] /ɡim ɟɛːzʌɡ/
  • 5. Agenda Visual Studio .NET Rainer .NET Framework 1.0 C# 1.0 Visual Studio .NET 2003 Everett .NET Framework 1.1, C# 1.2 Visual Studio 2005 Whidbey .NET Framework 2.0, C# 2,0 .NET Framework 3.0 WinFX Visual Studio 2008 Orcas .NET Framework 3.5, C# 3.0 Visual Studio 2010 Dev10 .NET Framework 4.0, C# 4.0 Reactive Extensions for .NET Framework 3.5 SP1
  • 6. Visual Studio .NET Rainer .NET Framework 1.0 / C# 1.0 VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 7. C# 1.0 – Managed Code Common Type System Classes Structures Enumerations Interfaces Delegates Attributes Directives Visual Studio® .NET VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 8. Common Type System Primitive Types Field Method Property Event VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 10. Field // C# const int constant = 0; readonly int readOnlyField; // C++ static const int constant = 0; const int readOnlyField; mutable int mutableField; VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 11. Field (cont.) Field ≠ variable default(T) if not initialized • null if reference type • 0 if value type VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 12. Method Member function with CV-qualifier class Object { public: String ToString() const { return const_cast<Object*>(this) ->ToString(); } virtual String ToString(); }; VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 13. Method (cont.) // C# void CallByRef(ref int value); bool TryGetValue(out int value); // C++ void CallByRef(int& value); bool TryGetValue(/*out*/int& value); VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 14. Property Get Method/Set Method ≠ reference to type // C# variable = obj.PropertyName; obj.PropertyName = value // C++ variable = obj->get_PropertyName(); obj->setPropertyName(value); VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 15. Property (cont.) Indexed property ≠ index operator [] int this[int index] { get { return array[index]; } set { array[index] = value; } } VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 16. Property (cont.) Implementation: lazy evaluation class class Property<typename T> { operator T() const; Property& operator=(const T& value); Property& operator=(const Property& value); }; VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 17. Property (cont.) VC 7.1 or higher: property extended storage- class modifier virtual TypeName get_PropertyName(); virtual void set_PropertyName(const TypeName& value); __declspec(property(get=get_Property Name, put=set_PropertyName)) TypeName PropertyName; VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 18. Event Multicast delegate // C# obj.EventName += someDelegate; obj.EventName -= someDelegate; if (obj.EventName != null) obj.EventName(); // C++ obj->add_EventName(someDelegate); obj->remove_EventName(someDelegate); obj->raise_EventName(); VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 19. Classes Finalizer ≠ destructor GC.ReRegisterForFinalize(this); GC.SuppressFinalize(this); // C# GC.KeepAlive(value); // C++ Pointer<Object> keepAlive(value); VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 20. Classes (cont.) Prevent R6025 – Pure virtual function call __forceinline void Release() { if (--referenceCounter == 0) { Finalize(); delete this; } } VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 21. Classes (cont.) Type initializer a.k.a. static constructor namespace { class Static : … ; Pointer<Static> _static; } … if (_static == NULL) { _static.CompareExchange(Pointer<Static>( new Static), Pointer<Static>(NULL)); } VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 22. Classes (cont.) Sealed class template <typename T> class Sealed { private: friend typename T; Sealed() { } ~Sealed() { } }; VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 23. Structures Lightweight – Value types Default constructor / finalizer • NEVER let contain unmanaged resources Expert only • Box/Unbox cost VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 24. Enumerations Value types string[] Enum.GetNames() TEnum[] Enum.GetValues() TEnum Enum.Parse(string s) bool Enum.TryParse( string s, out TEnum @enum) TEnum TEnum.MaxValue { get; } TEnum TEnum.MinValue { get; } VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 25. Interfaces Virtual inheritance template <> class Task<void> : public Object, public virtual IAsyncResult, public virtual IDisposable { … }; VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 26. Delegates Closures or managed functors Calling conventions: • cdecl • stdcall • fastcall • thiscall • function object VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 27. Delegates (cont.) #define DEFINE_DELEGATE(TPARAMS, PARAMS, ARGS) template <typename TResult TPARAMS> class delegate<TResult(PARAMS)> … #define DELEGATE_TPARAMS , typename T1 #define DELEGATE_PARAMS T1 arg1 #define DELEGATE_ARGS arg1 DEFINE_DELEGATE(DELEGATE_TPARAMS, DELEGATE_PARAMS, DELEGATE_ARGS); VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 28. Attributes template <typename T> class CustomAttribute { public: static const int get_Value() { return value; } private: static int value; }; #define CUSTOM_ATTRIBUTE(Type, _v) int CustomAttribute<Type>::value = _v VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 29. Directives using directive (C#) ≈ using directive (C++) Assemblies are referenced. #include directive (C++) package / import declarations (Java) #define directive defines a symbol assigns a value to a symbol VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 30. Visual Studio .NET 2003 Everett .NET Framework 1.1 / C# 1.2 VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 31. C# 1.2 – Bug Fix IDisposable interface • IEnumerator interface foreach (object obj in collection) // TEnumerator enumerator = // collection.GetEnumerator(); { } // if (enumerator is IDisposable) // enumerator.Dispose(); Visual Studio® .NET 2003 VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 32. Visual Studio 2005 Whidbey .NET Framework 2.0 / C# 2.0 VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 33. C# 2.0 – Generic Generics Iterators Partial Classes Nullable Types Anonymous Methods Static Classes Property Accessor Accessibilities Delegates VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Visual Studio® 2005
  • 34. Generics System.Collections.Generic • List<T> std::vector<T> • Queue<T> std::queue<T> • Stack<T> std::stack<T> • LinkedList<T> std::list<T> • Dictionary<TKey, TValue> std::map<Key, T> • HashSet<T> std::set<T> VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 35. Iterators IEnumerable<T> Where<T>( IEnumerable<T> source, Func<T, bool> predicate) { if (source == null) yield break; foreach (T value in source) { if (!predicate(value)) continue; yield return value; } } VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 36. Partial Classes // Generated.Designer.cs [CLSCompliant] partial class Generated : ICloneable { … } // Generated.cs [Serializable] partial class Generated : IDisposable { … } VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 37. Nullable Types Nullable<T> where T : struct Coalescing operator ?? int? nullable = null; int value = nullable ?? default(int); VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 38. Anonymous Methods // C# 2.0 Func<Type, bool> predicate = // nested type in C# 1.2 delegate(Type value) { return value == default(Type); }; VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 39. Static Classes Classes which are both abstract and sealed. public static class Helper { public static int GetHash(object obj) { return obj.GetHashCode(); } } VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 40. Property Accessor Accessibilities // C# 1.2 public Type PropertyName { get { return field; } } internal void SetPropertyName(Type value) { fieldName = value; } // C# 2.0 public Type PropertyName { get { return fieldName; } internal set { fieldName = value; } } VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 41. Delegates string Covariance() … Func<object> function = new Func<object>(Covariance); void Contravariance(object arg); Action<string> action = new Action<string>( Contravariance); VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 42. Delegates (cont.) // C# 1.2 Action action = new Action(obj.MethodName); // C# 2.0 Action action = obj.MethodName; VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 43. Visual Studio 2008 Orcas .NET Framework 3.5 / C# 3.0 VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 44. C# 3.0 – LINQ Implicitly Type Local Variables and Arrays Object Initializers Collection Initializers Extension Methods Anonymous Types Lambda Expressions Query Keywords Auto-Implemented Properties Partial Method Definitions VS .NET VS .NET 2003 VS 2005 VS 2008 Rx Visual Studio® 2008
  • 45. Implicitly Type Local Variables and Arrays // C# 2.0 Dictionary<string, object> dict = new Dictionary<string, object>(); Type[] types = new Type[] { typeof(int) }; // C# 3.0 var dict = new Dictionary<string, object>(); var types = new[] { typeof(int) }; VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 46. Object Initializers // C# 2.0 SomeKeyValue pair = new SomeKeyValue(); value.Name = “anonymous”; value.Value = null; // C# 3.0 var value = new SomeKeyValue() { Name = “anonymous”, Value = null, }; VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 47. Collection Initializers // C# 2.0 List<int> list = new List<int>(); list.Add(1); list.Add(2); // C# 3.0 var list = new List<int> { 1, 2 }; VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 48. Extension Methods static class ComponentExtensions { static void DoSomething( this IComponent component, T arg) { … } } ComponentExtensions.Do(component, arg); component.DoSomething(arg); VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 49. Anonymous Types foreach (var value in from row in table select new { Type = row.GetType(), Hash = row.GetHashCode(), }) { Console.WriteLine(“{{ Type = {0}, Hash = {1} }}”, value.Type, value.Hash); Console.WriteLine(value); } VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 50. Lambda Expressions // C# 2.0 Func<Type, bool> predicate = delegate(Type value) { return value == default(Type); }; // C# 3.0 Func<Type, bool> predicate = value => value == default(Type); VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 51. Query Keywords var q = from c in categories join p in products on c.ID equals p.CID orderby c.ID, p.Price descending group p.Price by c.ID into g let cid = g.Key where Predicate(cid) select g.Average(); VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 52. Query Keywords (cont.) var q = categories .Join(products, c => c.ID, p => p.CID, (c, p) => new { c = c, p = p }) .OrderBy(_ => _.c.ID) .ThenByDescending(_ => _.p.Price) .GroupBy(_ => _.c.ID, _.p.Price) .Select(g => new { g = g, cid = g.Key }) .Where(_ => Predicate(_.cid)) .Select(_ => _.g.Average()); VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 53. Auto-Implemented Properties // C# 2.0 public Type PropertyName { get { return fieldName; } internal set { fieldName = value; } } // C# 3.0 public Type PropertyName { get; internal set; } VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 54. Partial Method Definitions // Generated.Designer.cs partial class Generated { Generated() { OnInitialized(); } partial void OnInitialized(); } // Generated.cs partial class Generated { partial void OnInitialized() { … } } VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 55. Reactive Extensions for .NET Framework 3.5 SP1 VS .NET VS .NET 2003 VS 2005 VS 2008 Rx More LINQ with System.Interactive – Getting Started by Bart De Smet
  • 56. Reactive Extensions Task Parallel Library ∈ .NET Framework 4.0 Observer Design Pattern VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 57. Task Parallel Library System.Collections.Concurrent • ConcurrentBag<T> tbb::concurrent_vector<T> • ConcurrentQueue<T> tbb::concurrent_queue<T> • ConcurrentStack<T> tbb::concurrent_stack<T> • ConcurrentDictionary<TKey, TValue> tbb::concurrent_hash_map<Key, T> VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 58. Task Parallel Library (cont.) System.Threading.Tasks // C# 3.0 ThreadPool.QueueUserWorkItem( callback, state); // C# 4.0 or Rx Task.Factory.StartNew( action, state); VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 59. Observer Design Pattern VS .NET VS .NET 2003 VS 2005 VS 2008 Rx More LINQ with System.Interactive – Getting Started by Bart De Smet
  • 60. Observer Design Pattern (Further reading) Duality of IEnumerable<T> / IObservable<T> Reactive Framework Finally Explained More LINQ with System.Interactive series VS .NET VS .NET 2003 VS 2005 VS 2008 Rx
  • 61. Q&A