Programming | C# » Smulovics Péter - Rövid bevezetés a C#-ba

Datasheet

Year, pagecount:2001, 25 page(s)

Language:Hungarian

Downloads:2018

Uploaded:September 21, 2006

Size:263 KB

Institution:
-

Comments:

Attachment:-

Download in PDF:Please log in!



Comments

No comments yet. You can be the first!

Content extract

C# Rövid bevezetés a C# -ba példákon keresztül Smulovics Péter 2001 Eredetit készítette és fordította: Originally written and translated by Smulovics Péter 2001 Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. 1. TARTALOMJEGYZÉK 1. 2. Tartalomjegyzék . 2 A C# bemutatása . 4 2.1 2.2 2.3 2.4 2.5 A C# . 4 JITting . 4 CLS . 4 A “Hello World” Kód . 5 Típusok . 6 2.51 Megszámlálható Típusok . 6 Sbyte . 6 Byte . 6 Short. 6 Ushort. 6 Int . 6 Uint . 6 Long . 6 Ulong . 6 2.52 2.53 2.54 Bool Típus . 6 Char Típus . 6 Lebegőpontos Típus . 6 Float . 6 Double. 6 2.55 Decimal Típus. 6 Decimal . 6 2.56 2.57 2.58 2.59 2.510 2.511 2.512 2.513 2.514 2.6 Struct Típus. 6 Enum Típus . 7 Object Típus . 7 Class Típus . 7 Interface . 7 Delegates . 8 String Típus . 8 Tömbök . 8 Boxing és Unboxing. 8 Class . 8 2.61 2.62 Constructor és destructor . 8 Metódusok . 9 In Paraméterek . 9 Ref

Paraméterek . 9 Out Paraméterek . 9 Override . 9 Hide. 9 2.63 2.64 2.65 2.66 2.67 Példa Class . 10 Class Property-k és Indexer-k . 10 Attribútumok . 11 Event . 11 Modifikátorok alkalmazása . 12 Class Modifikátorok . 12 Member Modifikátorok . 12 Access Modifikátorok . 12 2.7 Vezérlő Kulcsszavak. 13 2.71 Szelekciós Kulcsszavak . 13 If Kulcsszó . 13 Switch Kulcsszó . 13 2.72 Iterációs Kulcsszavak . 14 For Kulcsszó . 14 Foreach Kulcsszó . 14 While Kulcsszó. 14 Do Kulcsszó . 14 Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. 2.73 Egyéb kulcsszavak . 14 Lock Kulcsszó . 14 2.8 Exception Kezelés. 15 2.81 2.82 Checked és Unchecked . 15 Exception Kezelő Kulcsszavak. 15 Catching : try-catch . 15 Catching : try-finally . 15 Catching : try-catch-finally . 15 2.83 Kivétel Throwing és Re-Throwing . 16 Standard Kivételek . 16 Throwing . 16 Re-Throwing . 16 2.84 2.85 3. Saját

Exception Class . 16 Mit szabad és mit nem Kivétel Kezelés . 17 Komponensek Készítése C# -ban . 18 3.1 Az első komponens . 18 3.11 3.12 3.2 Namespace . 19 3.21 3.22 3.3 Komponens építése . 18 Megfelelő kliens elkészítése . 18 Komponens építése . 19 Megfelelő kliens elkészítése . 20 Configuration és Deployment . 20 3.31 Kondícionális fordítás . 20 Prepocessor használat. 20 Kondícionális fordítás . 21 3.32 3.4 Dokumentáció. 21 Unmanaged Kód felhasználása . 21 3.41 COM Objektumok felhasználása az NGWS Runtime-ban . 21 Early-bound object hívása . 21 Late-bound object hívása . 22 3.42 3.43 4. Platform Invocation Services (PIS) . 22 Unsafe és Fixed kód. 23 NGWS általi biztonság . 24 4.1 Kód Alapú Biztonság . 24 4.11 4.12 4.13 4.14 4.2 Funkciói . 24 Jogok . 24 Standard Jogok . 24 Identity Jogok . 24 Szerep Alapú Biztonság . 25 Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához

használja a Kezdőlap lapot. 2. A C# BEMUTATÁSA 2.1 A C# • Egyszerű Nincs pointer Nincs ::, ., -> Egységes típus rendszer Boxing/Unboxing támogatás If csak Boolean lehet Ismétlődések kizárása (const <-> #define, stb.) • Modern Decimal típus Garbage Collector (szemétgyűjtés) Exception (kivétel) Biztonság • Objektum orientált Nincs többé global Alapban minden nonvirtual ‘Internal’ elérési típus Egyszeri öröklődés Delegálás (funkció pointerek) • Típus biztos Inicializálás Biztonságos cast-olás Túlcímzés ellenőrzés Túlcsordulás ellenőrzés • Verziók Komponensek Verzió számozás • Kompatibilis NGWS Common Language Specifiaction COM, COM+ OLE Automation Platform Invocation Services • Rugalmas Unsafe metódusok Unsafe memória 2.2 JITting • • • JIT EconoJIT PreJIT Erősen optimalizált IL kód, lassú fordítás Gyors konverzió, kód cache Ellenőrzött natív kód 2.3 CLS • Primitív

Típusok Bool, char, byte, short, int, long, float, double, string, object • Tömbök Ismert dimenzió, lehet többszörös is Alsó határ: 0 • Típusok Abstract vagy sealed Nulla vagy több interface Egyszeres öröklődés Overriding és hiding létezik Fields, methods, events, types Constructors Belső láthatóság Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. Öröklődés: System.ValueType / SystemEnum • Típus members Hide vagy override Argument és return type CLS Constructor, metódus, property felülírható Abstract members • Metódusok Static, virtual, instance Final vagy nem Final • Mezők Static vagy nonstatic • Property-k Get és Set metódusok Indexelhető • Enumerations Byte, short, int, long Nincs interface • Kivételek Throw és catch, finalize COM Exceptions • Interface-k Öröklődés • Events Add és Remove metódusok Öröklődik: System.Delegate

• Delegates Created és Invoked • Identifiers Nincs case sensitivity! 2.4 A “Hello World” Kód Using System; Class HelloWorld { public static int Main(string[] args) { Console.WriteLine(“Hello Világ!”); } } Using System; Class InputOutput { public static void Main() { Console.Write(“Név ?”); String strName = Console.ReadLine(); Console.Write(“Hello ” + strName); Console.Write(“Hello {0}”, strName); } } Részletes, futó kódok a Komponensek építése részben találhatóak (3.1 és 32) Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. 2.5 Típusok 2.51 Megszámlálható Típusok Sbyte Byte Short Ushort Int Uint Long Ulong 8 bit signed 8 bit unsigned 16 bit signed 16 bit unsigned 32 bit signed 32 bit unsigned 64 bit signed 64 bit unsigned -128 0 -32768 0 -2147483648 0 -9223372036854775808 0 2.52 Bool Típus Nincs többé nemnulla igaz 2.53 Char Típus char chSomeChar = ’A’;

chSomeChar = ’x0065’; chSomeChar = ’u0065’; chSomeChar = (char)65; nSomeInt = (int)A; ’ ” \ a  f v ’ ” Null Alert Backspace Form feed New line Carriage return Horizontal tab Vertical tab 2.54 Lebegőpontos Típus 7 Float Double 15 • • • • 1.5x10-45 5x10-324 3.4x1038 1.7x10308 Pozitív és negatív nulla Pozitív és negatív végtelen NaN Nem nulla értékek 2.55 Decimal Típus Decimal 28 1.0x10-28 7.9x1028 2.56 Struct Típus struct IP { public byte b1,b2,b3,b4; } class Test { 127 255 32767 65535 2147483647 4294967295 9223372036854775807 18446744073709551615 Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. public static void Main() { IP myIP; MyIP.b1 = 192; MyIP.b2 = 168; MyIP.b3 = 0; MyIP.b4 = 1; Console.Write("{0}{1}{2}{3}", myIP.b1, myIPb2, myIP.b3, myIPb4); } } struct Point { double X; double Y; void MoveBy(double dX, double dY) { X+=dX; Y+=dY; } } 2.57 Enum

Típus enum MonthNames { January, February, March, April }; enum MonthNames { January=1, February, March, April }; enum MonthNames { January=31, February=28, March=31, April=30 }; enum MonthNames : byte { January, February, March, April }; 0-val indul, típusa int. Lehetséges típusok: long, int, short, byte 2.58 Object Típus Alapclass az összes típushoz. Object theObj = 123; 2.59 Class Típus Lásd Class Modifikátorok (2.67) 2.510 Interface Interface Iface { void ShowMyFace(); int a {get;set} } class Cface:Iface { public void ShowMyFace() { // Implementation } int a { // Implementation } } class Test Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. { public static void Main() { Cface myFace = new CFace(); Iface myIFace = (IFace)CFace; } } 2.511 Delegates Lásd Events (2.66) 2.512 String Típus String myString = "text"; MyString = "text" + " more text"; char chFirst =

myString[0]; if (myString == yourString) { . } 2.513 Tömbök String[] arrArray = { "C", "C++", "C#" }; int[,] arr = {{0,1}, {2,3}, {4,5}}; int[,] myArr = new int[5,3]; int[][] my2Arr = new int[5]; my2Arr[0] = new int[4]; int[] SingleDim; int[,] TwoDim; int [][] Jagged; SingleDim = new int[20]; TwoDim = new int[,]{{1,2,3},{4,5,6}}; Jagged = new int[1][]; Jagged[0] = new int[]{1,2,3} 2.514 Boxing és Unboxing double Value; // Boxing object BoxedValue = Value; // Unboxing Value = (double)BoxedValue; 2.6 Class 2.61 Constructor és destructor // default constructor class TestClass { public TestClass(): base {} // default } Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. // parameterized constructor class TestClass { public TestClass(string strName, int nAge) { . } public ~TestClass() { Release(); } // destructor, called by GC ! public Release() { . } // call it by hand } 2.62 Metódusok

In Paraméterek public int Square(int n) { . } Console.WriteLine(Square(25)); // object always pass a reference by value Ref Paraméterek void Square(ref int n) { . } int n = 20; // init Square(ref n); Console.WriteLine(n); Out Paraméterek void Square(int n, out int nn) { . } int n; // noninit Square(20, out n); Console.WriteLine(n); Override class Triangle { public virtual { } } double Area(int a, int b, int c) class RightTriangle:Triangle { public override double Area(int a, int b, int c) { return(base.Area(a, b, c)); } } class Test { public static void Main() { RightTriangle Instance = new RightTriangle(); Console.WriteLine(((Triangle)Instance)Area(3,4,7)); } } Hide class Triangle { public double Area(int a, int b, int c) { } } class RightTriangle:Triangle { new public double Area(int a, int b, int c) Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. { return(base.Area(a, b, c)); } } class Test { public static

void Main() { RightTriangle Instance = new RightTriangle(); Console.WriteLine(((Triangle)Instance)Area(3,4,7)); } } 2.63 Példa Class Public class Person : IPersonAge { private int YOB; public Person() { } public int YearOfBirth { get { return YOB; }; set { YOB = value; }; } public int GetAgeToday() { return Today()YearOfBirth }; } 2.64 Class Property-k és Indexer-k Public class House { private int m myInt; private int[] m myIntArray; public int myInt { get { return m myInt; } set { m myInt = value; } } public int this[int nIndex] { get { return m myIntArray[nIndex]; } } } class Test { public static void Main() { Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. House myHouse = new House(); myHouse.myInt = 100; Console.WriteLine(myHousemyInt); Console.WriteLine(myHouse[0]); } } 2.65 Attribútumok // Transaction logic [Transaction(TransactionOption.Required)] class MyBusinessComponent { . } [PersonFirstName] String

Vorname; [PersonFirstName] String PrimarioNome; // custom attributes // Typeof(<object-expr>).GetCustomAttributes(); class PersonFirstNameAttribute : Attribute { public PersonFirstName() { } } 2.66 Event // forward declaration with delegation public delegate void EventHandler(string strText); class EventSource { public event EventHandler TextOut; public void TriggerEvent() { if (TextOut != null) TextOut("Triggered"); } } class TestApp { public static void Main() { EventSource evsrc = new EventSource(); evsrc.TextOut += new EventHandler(CatchEvent); evsrc.TriggerEvent(); evsrc.TextOut -= new EventHandler(CatchEvent); evsrc.TriggerEvent(); TestApp theApp = new TestApp(); evsrc.TextOut += new EventHandler(theAppInstanceCatch); evsrc.TriggerEvent(); } public static void CacthEvent(string strText) { Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. Console.WriteLine(strText); } public void InstanceCatch(string

strText) { Console.WriteLine("Instance " + strText); } } 2.67 Modifikátorok alkalmazása Class Modifikátorok • Abstract Nem lehet instace-t csinálni, implementálni kell az abstract metódusokat • Sealed Nem lehet örökölni abstract class AbstractClass { abstract public void MyMethod(); } sealed class DerivedClass : AbstractClass { public override void MyMethod() { Console.Writeline("sealed"); } } public class TestApp { public static void Main() { DerivedClass dc = new DerivedClass(); dc.MyMethod(); } } Member Modifikátorok Nem tartalmaz implementációt. Implikálisan virtual, és öröklődéskor meg kell adni az override Kulcsszót. Nem tartalmazhat referenciát, fordítási időben kiértékelődik • Abstract Method és accessor • Const Field és local variable • Event Field és property Class eseményeihez kliens kód hozzákötése • Extern Method Külső implementáció • Override Method és accessor

Módósítani egy abstract definiálású elemet • Readonly Field Csak deklaráció és contstructor változtathatja meg • Static Field, method, A Class-hoz és nem az instance-hez tartozik property, operator és constructor • Virtual Method és accessor Access Modifikátorok • Public Öröklődéssel felülírható Mindenhonnan elérhető Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. • Protected A Classból és minden származottból • Private Csak a Classból, leszármazottból sem • Internal Ugyanabból az applikációból 2.7 Vezérlő Kulcsszavak 2.71 Szelekciós Kulcsszavak If Kulcsszó class NestedIfApp { public static int Main(string[] args) { if (args.Length != 1) { Console.WriteLine("Usage: one argument"); return 1; } char chLetter = args[0][0]; if (chLetter >= A) if (chLetter <= Z) { Console.WriteLine("{0} is uppercase",chLetter); Return 0; }

chLetter = Char.FromString(args[0]); if (chLetter >= a && chLetter <= z) Console.WriteLine({0} is lowercase",chLetter); if (Char.IsDigit((chLetter = args[0][0]))) Console.WriteLine({0} is digit",chLetter); return 0; } } Switch Kulcsszó switch (nInt) { case 6: // something // wont drop to case 1, coz there is code at case 6 case 1: break; default: // code case 7: case 2: // here 7 will drop to 2, coz there is no code at case 7 goto case 3; // this line is unreachable case 4: goto default; } String is használható ! Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. 2.72 Iterációs Kulcsszavak For Kulcsszó for (initializer; condition; iterator) { if (condition1) { continue; // next iteration } // code if (condition2) { break; // terminate loop } // code } Foreach Kulcsszó // foreach (Type identifier in expression) { . } class EnviromentDumpApp { public static void Main() { Idictionary envvars =

Environment.GetEnvironmentVariables(); Console.WriteLine("Count: {0}", envvarsKeysCount); Foreach (String strKey in envvars.Keys) { Console.WriteLine("{0} = {1}", strKey, envvars[strKey].ToString()); } } } // Implements IEnumerable with GetEnumerator() Point[] Points = GetPoints(); foreach( Point p in Points ) { MyPen.MoveTo(Pointx,Pointy); } While Kulcsszó while (conditional) { . } Do Kulcsszó do { embedded statements } while (condition); 2.73 Egyéb kulcsszavak Lock Kulcsszó lock(<object>){ . }; Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. 2.8 Exception Kezelés 2.81 Checked és Unchecked // Programatic Exception Checking checked { . } unchecked { . } 2.82 Exception Kezelő Kulcsszavak Catching : try-catch Try { checked { for (;nCurDig <= nComputeTo; nCurDig++) nFactorial *= nCurDig; } } catch (OverflowException oe) { Console.WriteLine("Computing {0} caused overflow",

nComputeTo); Return } Console.WriteLine("{0}! is {1}", nComputeTo, nFactorial); Catching : try-finally bool bAllFine = false; try { checked { for (;nCurDig <= nComputeTo; nCurDig++) nFactorial *= nCurDig; } bAllFine = true; } finally { if (!bAllFine) Console.WriteLine("{0} caused", nComputeTo, nFactorial); Else Console.WriteLine("{0}! is {1}", nComputeTo, nFactorial); } Catching : try-catch-finally class CatchIT { public static void Main() { try { int x = 10/0; } catch(DivideByZeroException divEx) { } Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. catch(Exception Ex) { } finally { } } } Megcserélve a kettő catch sorrendjét, a második sosem hajtódna végre 2.83 Kivétel Throwing és Re-Throwing Standard Kivételek • Exception Base class minden exception object-hez • SystemException Base class minden exception object-hez, ami runtime • IndexOutOfRangeException

Kiindexelve egy tömbből • NullReferenceException NULL objektum referenciálva • InvalidOperationException Ha a hívás, figyelembe véve a class aktuális helyzetét, érvénytelen • ArgumentException Base class minden argumens alapú exception object-hez • ArgumentNullException Ha az argument NULL ahol nem megengedett • ArgumentOutOfRangeException Ha az argument kívűl van a megengedett határokon • InteropException NGWS-n kívüli exceptionok • ComException A COM klasszikus HRESULT információt tartalmazó exception-ja • SEHException Exception enkapszulálva a információt Win32 Structured Exception Handling Throwing throw new ArgumentException("Argument can be 5"); Re-Throwing Try { checked { for (;nCurDig <= nComputeTo; nCurDig++) nFactorial *= nCurDig; } } catch (OverflowException oe) { Console.WriteLine("Computing {0} caused overflow", nComputeTo); throw; // rethrowing } 2.84 Saját Exception Class public

class MyImportantException:Exception { public MyImportantException():base() {} public MyImportantException(string message):base(message) {} Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. public MyImportantException(string message, Exception inner):base(message, inner) {} } public class ExceptionTestApp { public static void TestThrow() { throw new MyImportantException("Baaaad !"); } public static void Main() { try { ExceptionTestApp.TestThrow(); } catch (Exception e) { Console.WriteLine(e); } } } 2.85 Mit szabad és mit nem Kivétel Kezelés • • • • • • • • Adjunk jól érthető leírást, amikor eldobjuk a kivételt Csak akkor dobjunk kivételt, ha az eset kivételes; vagyis, amikor a normális visszatérési érték nem elégséges Normális vagy várható hibák jelzésére ne használjunk kivételt Dobjunk ARGUMENTEXCEPTION -t, ha nem jó paramétert kapunk Dobjunk

INVALIDOPERATIONEXCEPTION -t, ha nem megfelelő státuszban van az objektumunk Dobjuk mindig a legmegfelelőbb kivételt Használjunk láncba fűzött kivételeket. Segítenek követni a kivétel-fát Ne dobjunk NULLREFERENCEEXCEPTION vagy INDEXOUTOFRANGEEXCEPTION kivételt Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. 3. KOMPONENSEK KÉSZÍTÉSE C# -BAN 3.1 Az első komponens 3.11 Komponens építése Using using using using System; System.Net; System.IO; System.Text; public class RequestWebPage { private const int BUFFER SIZE=128; private string m strURL; public RequestWebPage() { } public RequestWebPage(string strURL) { m strURL = strURL; } public string URL { get { return m strURL; } set { m strURL = value; } } public void GetContent( out string strContent) { if (m strURL == "") throw new ArgumentException("URL must be provided"); WebRequest theRequest = (WebRequest)

WebRequestFactory.Create(m strURL); WebResponse theResponse = theRequest.GetResponse(); int BytesRead = 0; Byte[] Buffer = new Byte[BUFFER SIZE]; Stream ResponseStream = theResponse.GetResponseStream(); BytesRead = ResponseStream.Read(Buffer, 0, BUFFER SIZE); StringBuilder strResponse = new StringBuilder(""); while (BytesRead != 0) { strResponse.Append(EncodingASCIIGetString (Buffer, 0, BytesRead)); BytesRead = ResponseStream.Read(Buffer, 0, BUFFER SIZE); } strContent = strResponse.ToString(); } } 3.12 Megfelelő kliens elkészítése Using System; Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. Class TestWebReq { public static void Main() { RequestWebPage wrq = new RequestWebPage(); wrq.URL = "http://wwwmicrosoftcom"; string strResult; try { wrq.GetContent(out strResult); } catch (Exception e) { Console.WriteLine(e); return; } Console.WriteLine(strResult); } } 3.2 Namespace 3.21 Komponens

építése Using using using using System; System.NetSockets; System.IO; System.Text; namespace CSharp { public class WhoisLookup { public static bool Query(string strDomain, out string strWhoisInfo) { const int BUFFER SIZE = 128; if (strDomain == "") throw new ArgumentException( "Domain must be provided"); TCPClient tcpc = new TCPClient(); StrWhoisInfo = "N/A"; if (tcpc.Connect("whoisnetworksolutionscom", 43) != 0) return false; Stream s = tcpc.GetStream(); strDomain += " " Byte[] bDomArr = Encoding.ASCIIGetBytes(strDomainToCharArray()); s.Write(bDomArr, 0, strDomainLength); Byte[] Buffer = new Byte[BUFFER SIZE]; StringBuilder strWhoisResponse = new StringBuilder(""); Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. int BytesRead = s.Read(Buffer, 0, BUFFER SIZE); while(BytesRead != 0) { strWhoisResponse.Append( Encoding.ASCIIGetString(Buffer, 0,

BytesRead)); BytesRead = s.Read(Buffer, 0, BUFFER SIZE); } tcpc.Close(); strWhoisInfo = strWhoisResponse.ToString(); return true; } } } 3.22 Megfelelő kliens elkészítése using System; using CSharp; class TestWhois { public static void Main(string[] args) { string strResult; bool bReturnValue; try { bReturnValue = WhoisLookup.Query(args[0], out strResult); } catch (Exception e) { Console.WriteLine(e); return; } if (bReturnValue) Console.WriteLine(strResult); else Console.WriteLine("No Info"); } } 3.3 Configuration és Deployment 3.31 Kondícionális fordítás Prepocessor használat #define RELEASE #undef DEBUG #if RELEASE // code1 #warning Warning #elif DEBUG && !DEMO Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. // code2 #error Error #else // code3 #endif Kondícionális fordítás #define DEBUG using System; class Info { [conditional("DEBUG")] public static void Trace(string

strMessage) { Console.WriteLine(strMessage); } [conditional("DEBUG")] public static void TraceX(string strFormat, params object[] list) { Console.WriteLine(strFormat, list); } } class TestConditional { public static void Main() { Info.Trace("Coool!"); Info.TraceX("{0} {1} {2}", "C", "U", 2001); } } 3.32 Dokumentáció • • • • • • • • • • • • • <summary> <para> <see cref/> <seealso cref/> <list> <item> <remarks> <paramref> <example> <code> <param> <returns> <value> Egyszerű leírás Paragrafus Referencia másik elemre Lásd még Lista Elem Megjegyzés Referencia paraméterre Leírás és példa Példa kód Paraméter Visszatérési paraméter Property leírása 3.4 Unmanaged Kód felhasználása 3.41 COM Objektumok felhasználása az NGWS Runtime-ban Early-bound object hívása // tlbimp asptouch.dll /out:asptouchlibdll Hiba!

A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. using System; using ASPTOUCHLib; class TouchFile { public static void Main() { TouchIt ti = new TouchIt(); Try { bResult = ti.SetToCurrentTime("asptouchcs"); } catch(Exception e) { Console.WriteLine(e); } } } Late-bound object hívása using System; using System.Reflection; class TestLateBound { public static void Main() { Type tTouch; tTouch = Type.GetTypeFromProgID("AspTouchTouchIt"); Object objTouch; objTouch = Activator.CreateInstance(tTouch); Object[] parameters = new Object[1]; parameters[0] = "text.txt"; bool bResult = false; try { bResult = (bool)tTouch.InvokeMember("SetToCurrentTime", BindingFlags.InvokeMethod, null, objTouch, parameters); } catch(Exception e) { Console.WriteLine(e); } if (bResult) Console.WriteLine("Success !"); } } 3.42 Platform Invocation Services (PIS) using System; class TestPInvoke {

[sysimport(dll="user32.dll", name="MessageBoxA"] public static extern int PopupBox(int h, string m, string c, int type); Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. public static void Main() { int nMsgBoxResult; nMsgBoxResult = PopupBox(0, "Hello C#", "PInvoke", 0); } } 3.43 Unsafe és Fixed kód • Unsafe Lehetőséget ad, hogy memóriablokkokkal dolgozzunk (pointers, COM Interoperability és PIS) • Fixed Megvédi a GC általi relokációtól public class SquareSampleUnsafe { unsafe public void CalcSquare(int nSideLength, int *pResult) { *pResult = nSideLength nSideLength; } } class TestUnsafe { public static void Main() { int nResult = 0; unsafe { fixed (int * pResult = &nResult) { SquareSampleUnsafe sqsu = new SquareSampleUnsafe(); sqsu.CalcSquare(15, pResult); Console.WriteLine(nResult); } } } } Hiba! A(z) Heading 1 itt megjelenítendő szövegre

történő alkalmazásához használja a Kezdőlap lapot. 4. NGWS ÁLTALI BIZTONSÁG 4.1 Kód Alapú Biztonság 4.11 Funkciói • • • • • Adminisztrátorok létrehozhatnak biztonsági beállításokat, amik bizonyos jogokat adhatnak bizonyos kódcsoportoknak A kód megkövetelheti, hogy a hívó bizonyos jogokkal rendelkezzen Kód végrehajtás a futtató rendszer által korlátozható. Ellenőrzések történnek, hogy a hívó rendelkezik-e a szükséges jogokkal a végrehajtáshoz Kód megadhatja, mik azok a jogok, amik szükségesek a futásához, mik azok, amik jók lennének, és mik azok a jogok, amikkel soha nem szabad rendelkeznie A kód alapú biztonság a jogokat a komponens betöltésekor adja. Ez a folyamat a kód követelésein alapszik, figyelembe véve a biztonsági beállításokat 4.12 Jogok • Required Jogok, melyek szükségesek a kód futásához • Optional Jogok, melyek nem alapvetően szükségesek a helyes futáshoz, de jó lenne, ha

rendelkezhetnénk velük • Refused Jogok, melyekről biztosítani szeretnénk, hogy a kód soha ne juthasson hozzájuk még akkor is, ha a biztonsági beállítások engedélyeznék. Lehetséges biztonsági lyukak kiküszöböléséhez használatos 4.13 Standard Jogok • EnvironmentPermission Hozzáférhetőség környezeti változókhoz, csak írható/olvasható (módósítás, létrehozás és törlés) olvasható és/vagy • FileDialogPermission • FileIOPermission • IsolatedStoragePermission Hozzáférhetőség a fileokhoz a SystemFileDialog használatával, a felhasználónak jóvá kell hagynia Hozzáférhetőség file I/O-hoz, lehetőségek: olvasás, írás (felülírás és törlés) és append Hozzáférhetőség az isolated storage-hoz, lehetőségek: allowed usage, quota size, expiration of data, data retaining • ReflectionPermission Hozzáférhetőség a típusok nempublikus mezőihez, Reflection.Emit • RegistryPermission •

SecurityPermission Hozzáférhetőség a registry kulcsaihoz, olvasás, létrehozás, írás céljából, megadott kulcslistákkal Hozzáférhetőség a biztonsági rendszer kapcsolóihoz, lehetőségek (többek között): control execution of code, override security checks, invocation of unmanaged code, verification skipping, serialization, etc. • UIPermission Hozzáférhetőség az UI-hoz, lehetőségek (többek között): ablakok használata, hozzáférés az event queues-hoz, clipboard 4.14 Identity Jogok • PublisherIdentityPermission Egy NGWS komponensen lévő aláírás bizonyítja a software publisher kilétét • StrongNameIdentityPermission Definiálja a kriptografikusan erős nevét a komponensnek. Az erős név kulcs és az egyszerű név együtt számít bele az identitásba Hiba! A(z) Heading 1 itt megjelenítendő szövegre történő alkalmazásához használja a Kezdőlap lapot. • ZoneIdentityPermission Definiálja a zonát ahonnan a kód

származik. Egy URL csak egy zónához tartozhat • SiteIdentityPermission Jogok, melyek alapjául az a web oldal szolgál, ahonnan a futatott kód származik • URLIdentityPermission Jogok, melyek alapjául az az URL szolgál, ahonnan a futatott kód származik 4.2 Szerep Alapú Biztonság • Generic principals Nem hitelesített felhasználók • Windows principals Windows felhasználók és csoportjaik. A megszemélyesítés támogatott • Custom principals Az applikáció által definiált. A felhasználó alapfogalmát, személyiségét és szerepét bővíti ki. Az egyetlen megszorítás az, hogy az applikációnak rendelkeznie kell egy authentikációs modullal, és egy a felhasználót jelképező típussal