C# klíčové slovo THIS

Začátečníci mají často problém se správným pochopením funkce a využití klíčového slova this. Tento příspěvek by jim mohl pomoci.

Klíčové slovo this odkazuje na současnou instanci třídy. Lze ho použít pro přístup k členům třídy z konstruktoru, metod a přístupových metod dané instance.

Statické konstruktory a metody nemají ukazatel this, protože nelze vytvořit jejich instance. Během psaní kódu metody nebo vlastnosti třídy vám použití this zpřístupní intellisense. This se používá, pokud chceme procházet aktuální instanci, např. potřebujeme provést výpočet nebo další operace související s touto instancí.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace this_priklad_1
{
    class Program
    {
        public class Priklad
        {
            int vek;
            string jmeno;

            public Priklad(int vek, string jmeno)
            {
                vek = vek;
                jmeno = jmeno;
            }

            public void Ukaz()
            {
                Console.WriteLine("Tvůj věk je:" + vek.ToString());
                Console.WriteLine("Tvoje jméno je:" + jmeno);
            }
        }

        static void Main(string[] args)
        {
            int _vek;
            string _jmeno;

            Console.WriteLine("Vlož svůj věk:");
            _vek = Int32.Parse(Console.ReadLine());

            Console.WriteLine("Vlož svoje jméno:");
            _jmeno = Console.ReadLine();

            Priklad objekt = new Priklad(_vek, _jmeno);

            objekt.Ukaz();
            Console.ReadLine();
        }
    }
}
Výsledek při spuštění

Jak je vidět, program nevrátil žádné hodnoty. Důvodem je upřednostnění lokálních proměnných vek a jmeno před proměnnými instance. Všimněte si, že program vypsal pouze varování, nikoliv chybu. (Assignment made to some variable; did you mean to assign something else?) Musíme použít slovo this jako odkaz na proměnnou aktuální instance.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace this_priklad_2
{
    class Program
    {
        public class Priklad
        {
            int vek;
            string jmeno;

            public Priklad(int vek, string jmeno)
            {
                // ZDE BYLA PROVEDEN ZMENA (pridano THIS)
                this.vek = vek;
                this.jmeno = jmeno;
            }

            public void Ukaz()
            {
                Console.WriteLine("Tvůj věk je:" + vek.ToString());
                Console.WriteLine("Tvoje jméno je:" + jmeno);
            }
        }

        static void Main(string[] args)
        {
            int _vek;
            string _jmeno;

            Console.WriteLine("Vlož svůj věk:");
            _vek = Int32.Parse(Console.ReadLine());

            Console.WriteLine("Vlož svoje jméno:");
            _jmeno = Console.ReadLine();

            Priklad objekt = new Priklad(_vek, _jmeno);

            objekt.Ukaz();
            Console.ReadLine();
        }
    }
}

Výsledek za použití THIS
Tento příklad rozhodně nepokrývá všechny možnosti využití slova this, ale pokouší se ilustrovat, jak a kdy lze toto slovo použít.

Zdrojový kód je stažení na: http://www.butras.cz/download/this_priklad.zip

Zdroj: http://www.c-sharpcorner.com/UploadFile/puranindia/thiskeywordinCsharp05222009003020AM/thiskeywordinCsharp.aspx

Pokračování symbolickými a pevnými odkazy (MKLINK)

Při vytváření symbolický můžete narazit na problém pokud chcete vytvořit odkaz ze síťové adresy.

Příklad:
CMD> MKLINK /D C:\Test2 \\server\data

A zjistíte, že Vám tento symbolický odkaz nejde vytvořit, protože je možné vytvářet odkazy pouze z místních odkazů

Pomoc si můžete pomocí příkazu FSUTIL, kterém můžete zjistit nastavení (práva pro mklink).

Pomocí tohoto příkazu zjistíte Vaše nastavení:

CMD> fsutil behavior query symlinkevaluation

Výpis nastavení MKLINK


 Pomocí tohoto příkazu provede nastavení:

CMD> fsutil behavior set SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1

Nastavení práv MKLINK
Vysvětlení jednotlivých parametrů:
L2L -> symbolické odkazy místní na místní (local to local)
L2R -> symbolické odkazy místní na vzdálené (local to remote)
R2L -> symbolické odkazy vzdálené na lokální (remote to local)
R2R -> symbolické odkazy vzdálené na vzdálené (remote to remote)

Volba :1 (Povoleno) nebo :0 (Zakázáno)

Jak pracovat se symbolickými a pevnými odkazy (MKLINK)

Do Windows Vista a samozřejmě i Windows 7, 8 i 8.1 je přidána podpora tzv. symbolických odkazů, pevných odkazů a spojení adresářů. Pokusím se ukázat k čemu je to užitečné a co tím můžete dosáhnout.

Pokud jste dříve přišli do styku s některým z unixových operačních systémů, možná tušíte, že na úrovni souborového systému lze vytvářet tzv. symbolické odkazy (symbolic links, symlinks) a pevné odkazy (hard links). Obdobně je tomu i ve Windows. Principy fungování symbolických i pevných linků se mezi těmito dvěma světy téměř neliší. Ve světě Windows se navíc můžete setkat s pojmem spojení adresáře (junction).

Symbolický odkaz - je principem svého fungování podobný klasickému zástupci. Odkazuje na soubor či složku a je stejně jako zástupce je reprezentován souborem. Tentokrát s tím rozdílem, že do jeho obsahu nelze zasahovat. Měli byste také myslet na to, že diskový oddíl na němž je samotný symbolický odkaz uložen musí být typu NTFS. Pro odkazovaný cílový soubor čí složku toto omezení neplatí.

Pevný odkaz - zatímco symbolický link slouží pouze jako ukazovátko na soubor či složku, pevný odkaz (hard link) lze vytvořit pouze mezi dvěma soubory. Vazba mezi nimi je o poznání důkladnější. Vytvoříme-li pevný odkaz C:\pevnylink.txt na existující dokument C:\Windows\soubor.txt, vznikne vlastně druhá cesta k témuž souboru. Přičemž obě budou odkazovat na stejný soubor, který je na pevném disku fyzicky uložen pouze jednou a zabírá tedy místo na disku pouze jednou. Ať už tedy upravíte text dokumentu C:\Windows\soubor.txt či v jeho pevném odkazu C:\pevnylink.txt, budou vždy viditelné z obou umístění.

Spojení adresářů - zajímavější uplatnění můžete najít pro techniku Spojení adresářů (Junction). Opět jde o dvě cesty ke složce, která je fyzicky na pevném disku uložena jednou. Jde tak trochu o obdobu symbolického linku. Praktické použití může být následující. Na externím pevném disku v umístění K:\Data\ máte uložené soubory, kterou byste rádi viděli jako složku C:\Data.

Syntax:
mklink [[/d] | [/h] | [/j]] <Link> <Target>


Parametry: Poznámka
/d Creates a directory symbolic link. By default, mklink creates a file symbolic link.
/h Creates a hard link instead of a symbolic link.
/j Creates a Directory Junction.
<Link> Specifies the name of the symbolic link that is being created.
<Target> Specifies the path (relative or absolute) that the new symbolic link refers to.
/? Displays help at the command prompt.

Příklad:
 
CMD> mklink /d C:\Test2 C:\Test 
 


Smazání symbolického nebo pevného odkazu provede standardním smazáním ve Windows nebo pomocí příkazu:
 
CMD> del C:\Test2

Pro jednoduší vytvoření symbolických nebo pevných odkazů můžete použít program Justion Link Magic.

Pro zjištění jaké máte vytvořené symbolické nebo pevné odkazy můžete použít tento příkaz. Provede se prohledání celého disku C:\ a podřízených adresářů a nalezne všechny adresáře, které mají atribut body změny zpracovávání.
 
CMD> dir /AL /S c:\

Typy linku a jejich podpora ve Windows:

C# Identifikátory a Klíčová slova


Identifikátory jsou jména, kterými se označují prostory jmen, třídy, metody, proměnné. Každý identifikátor musí začínat písmenem, nebo podtržítkem. Nesmí tedy začínat číslicí! Identifikátor dále nesmí obsahovat bílé znaky (white space) - tj. mezery, tabelátory, odřádkování, dále tečky, čárky, závorky a jiné speciální znaky.

Klíčová slova, anglicky keywords jsou vyhrazená slova programovacího jazyka, která se nesmí používat jako jména proměnných, tříd atd., jelikož jsou tyto slova již vyhrazena k jinému účelu. Např. int k deklaraci proměnných. Kdybych dal int int;, překladač by asi špatně rozpoznával, co tím chce autor říct.

Třeba int Int; už by překladač pobral, jelikož je C sharp je case-sensitive. Int s velkým písmenem by již nebral jako klíčové slovo (všechny začínají malým písmenem), na co si však stěžovat čitelnost kódu, proto raději vymýšlejte jména, která se nepodobají žádným klíčovým slovům. 

Seznam všech klíčových slov:
abstract as base bool
break byte case catch
char checked class const
continue decimal default delegate
do double else enum
event explicit extern false
finally fixed float for
foreach goto if implicit
in in (generic modifier) int interface
internal is lock long
namespace new null object
operator out out (generic modifier) override
params private protected public
readonly ref return sbyte
sealed short sizeof stackalloc
static string struct switch
this throw true try
typeof uint ulong unchecked
unsafe ushort using virtual
void volatile while

Více informací: http://msdn.microsoft.com/cs-cz/library/x53a06bb.aspx

Optimalizace SQL dotazů

Motivace:
  • SQL jazyk je velmi flexibilní jazyk
  • Dvěma či více způsoby je možné získat stejná data
  • Rychlost různých dotazů ovšem není úplně stejná, i přesto, že vrací stejná data

Proč optimalizovat:
  • Jedná se především o minimalizaci nákladů: zdrojového času, kapacita dotazu, rychlejší odpovědi

Obecná pravidla:
  • Vyjmenovat sloupce
  • Používat co nejméně klauzuli LIKE
  • Používat co nejméně klauzuli IN, NOT IN
  • Používat klauzuli TOP, nebo LIMIT
  • Na začátek dávat obecnější podmínky
  • Výběr vhodného pořadí spojení
  • Nastavit indexy

Pravidlo 1 - Vyjmenovat sloupce

  • V SELECT dotazech nepoužívat seznam sloupců hvězdičku (*)
  • Ve většina případech nepotřebujete ve výsledku všechny sloupce

SELECT * FROM Users
Doporučuji:
SELECT UserName, Login, FullName FROM Users

Pravidlo 2 - Co nejméně LIKE
  • Nedoporučuje se používat pro vyhledání ve velkých textových polích
  • Zamyslet se, jestli není možné vyhledání provést jinou metodou

Pravidlo 3 - Co nejméně IN, NOT IN
  • Vhodnější je použít příkaz WHERE a WHERE NOT EXIST

SELECT Name, Year FROM Car WHERE Car IN ('Fiat', 'Skoda', 'Ford')
Doporučuji:
SELECT Name, Year FROM Car WHERE Typ_Car = 'Automobile'

Pravidlo 3 - Používat TOP (LIMIT)
  • V když vybíráme např. nejstaršího člověka
SELECT Year FROM People ORDER BY Alt DESC
  • Dotaz vybere všechny záznamy, které následně setřídí
Lepší řešení MS-SQL:
SELECT TOP 1 Year FROM People ORDER BY Alt DESC
Lepší řešení MY-SQL:
SELECT Year FROM People ORDER BY Alt DESC LIMIT 0,1

Pravidlo 4 - Na začátek obecnější podmínky
  • V klauzuli WHERE zadávat na začátek obecné podmínky, které vyberou nejmenší počet záznamů
SELECT Name, Year FROM People WHERE Alt > '18' AND Sex = 'Woman'
Doporučuji:
SELECT Name, Year FROM People WHERE Sex = 'Woman' AND Alt > '18'

Android 4.4 KitKat uvolněn pro Nexus 7 a Nexus 10

Google v noci na dnešek na Google+ oznámil, že majitelé tabletů Nexus 7 (verze 2012 i 2013) a Nexus 10 mohou očekávat upgrade na Android 4.4, který přijde formou OTA („Over The Air“ – vzduchem). 

http://www.svetandroida.cz/media/2013/11/nexusy_update_gplus-300x116.jpg
Zpráva na Google+
Pro majitele Nexus 7 je update zatím uvolněn jen pro verzi s WIFI, majitelé s verzí 3G/LTE si budou muset ještě chviličku počkat. Dle oficiálního vyjádření se dočkají aktualizace "v dohledné době" bez bližšího upřesnění.

Jak otevřít .hlp na Windows 7, 8, 8.1, atd...

Již od verze Windows Vista není součástí OS aplikace WinHlp32.exe, který slouží pro zobrazování .hlp souborů. Historie této aplikace již je známa z Windows 3.1 a jsou stále používány jako zdroj nápovědy pro různé aplikace. 

 

WinHlp32 je dispozici pro každý operační systém Windows 7, 8, 8.1, 2008 R2. A zároveň pro obě bitové platformy (x84 a x64) a to včetně českého jazyka.



Stáhnout můžete z Microsoft Download Centra:
Windows 7: http://www.microsoft.com/en-us/download/details.aspx?id=91
Windows 8: http://www.microsoft.com/en-us/download/details.aspx?id=35449
Windows 8.1: http://www.microsoft.com/en-us/download/details.aspx?id=40899
Windows Server 2008 R2: http://www.microsoft.com/en-us/download/details.aspx?id=4424

IE 11 pro Windows 7

Pokud používáte Windows 7 a jste fanoušky prohlížeče Internet Explorer, bude pro vás určitě potěšující, že IE11 bude nyní k dispozici i pro zmíněné "sedmičky".
Podle výrobce je údajně nová verze Internet Explorer nejrychlejším prohlížečem na trhu a měl by nabídnout až o 30% rychlejší prohlížení "reálných webových stránek" něž konkurence. IE11 je dodáván společně s operačním systémem Windows 8.1, který byl vydán již před několika týdny. Některé jeho funkce ale samozřejmě nebudou k dispozici v prostředí Windows 7. 

Další zajímavou novinkou je podpora technologie WebGL pro vytváření náročné hardwarově akcelerované 3D grafiky za užití čište webových technologií. Konkurenční prohlížeče tuto de facto webovou implementaci OpenGL podporují již delší dobu. Stejně jako v Internet Exploreru 11 nově podporovaný experimentální protokol SPDY řešící některé nedostatky HTTP.

V prohlížeči Internet Explorer 11 by tak měly být svižnější služby jako je Facebook, Twitter, Google Plus či Gmail, které SPDY již podporují. Microsoft navíc opět výrazně optimalizoval výkon svého enginu Chakra pro zpracování kódu v jazyce JavaScript. Vyladěna by měla být také hardwarová akcelerace za využití Direct2D.

Internet Explorer 11 si lze stáhnout z webu Microsoftu

Ochrana e-mailových adrese na webových stránkách

Máte na vašich webových stránkách umístěn e-mail? Tak doporučuji použít ochranu e-mailu pomocí skriptu v JS, který jsem vytvořil. Tento skript vás ochrání zdrojový kód před roboty, který hledají e-mailové adresy ve zdrojovém kódu.

Postup:
Vytvořte JS script "securitymail.js", který bude obsahovat níže uvedený kód

// Security Mail v1.1
// Vytvoril: Bock Ondrej
$(document).ready(function () {
    $("a[rel^='mailed']").each(function () {
        var mailtoVal = $(this).attr('href');
					
	    mailtoVal = mailtoVal.replace("[email]","mailto:");
	    mailtoVal = mailtoVal.replace("[zavinac]","@");        	    
	    for (i = 0; i <= 10; ++i) {
	        mailtoVal = mailtoVal.replace("[tecka]", ".");	        
	    }
	    $(this).attr('href', mailtoVal);
					
	    var mailtoA = $(this).text();

	    mailtoA = mailtoA.replace("[zavinac]","@");
	    for (i = 0; i <= 10; ++i) {
	        mailtoA = mailtoA.replace("[tecka]", ".");
	    }	    
        $(this).text(mailtoA);
					
	    // Auto-generate title tags for users
        var mailtoTitle = mailtoVal.replace("mailto:","E-mail: ");
	    $(this).attr('title',mailtoTitle);
					
	    // onClick Event
	    $(this).click(function () {
	        window.location.href = mailtoVal;
	        return false;
	    });
	});
});

Do sekce <head></head> přidejte volání na JS script JQuery (můžete použít hostovaný) a SecurityMail.


A kde máte zadanou e-mailovou adresu tak zadejte místo toho upravený tag <a></a>


Ukázka ke stažení ZDE

Záplata pro Windows 7 a 8 smaže zbytky po aktualizacích

Majitele Windows 7 a Windows 8 potěší jedna aktualizace, která v nástroji Vyčištění disku zpřístupní novou položku "Vyčištění aktualizací Windows Update". Díky této funkci se provede vyčištění starých verzí souboru a nastavení při aktualizaci Windows. Všechny tyto soubory a nastavení se ukládají do adresáře "C:\Windows\WinSxS". Windows tyto soubory a nastavení ukládá , aby se mohl případně uživatel vracet libovolně v čase nazpátek.

Pro Windows 7 se jedná o aktualizaci (KB 2852386), která do standardního čistícího nástroje přidává možnost smazat nepotřebné soubory z Windows Update.

Pro Windows 8 se jedná o aktualizaci (KB 2869628), která do standardního čistícího nástroje přidává možnost smazat nepotřebné soubory z Windows Update.

Postup:
Klikněte na Vyčistit systémové soubory (Obrázek 1) a pak nezapomeňte zahrnout Vyčištění aktualizací Windows Update (Obrázek 2).

Obrázek 1

Obrázek 2


  Více na: http://www.zive.cz/bleskovky/zaplata-pro-windows-7-a-8-smaze-zbytecny-odpad-z-aktualizaci/sc-4-a-170907/default.aspx#utm_medium=selfpromo&utm_source=zive&utm_campaign=copylink