Snipety to kawałki kodu, które można wygenerować wpisując słowo kluczowe i naciskając dwa razy przycisk tabulatora [TAB]. Po wygenerowaniu kodu niektóre jego fragmenty są zielone, wpisanie w te pola wartości powoduje aktualizację innych pól kodu wygenerowanego za pomocą snipeta (patrz np. snippety właściwości).
Poniżej przedstawiam listę standardowych snipetów dostępnych w Visual Studio 2008 Express i kod jaki generują.
if
Snipet tworzy warunek, z polem do wpisania treści warunku.
Wynik działania:
if (true) {
}
#region
Tworzy nowy region o domyślnej nazwie MyRegion, którą można zmienić.
Wynik działania:
#region MyRegion
#endregion
~
Tworzy destruktor klasy, w której snippet zostanie użyty (w tym wypadku został użyty w klasie Form1)
Wynik działania:
~Form1() {
}
checked
Tworzy blok kodu checked.
Wynik działania:
checked {
}
unchecked
Tworzy blok kodu unchecked
Wynik działania:
unchecked {
}
class
Tworzy pustą deklarację klasy o domyślnej nazwie MyClass
Wynik działania:
class MyClass {
}
ctor
Tworzy pusty konstruktor klasy w której snippet zostanie użyty (w tym wypadku Form1)
Wynik działania:
public Form1 () {
}
cw
Skrót do wygenerowania polecenia wypisania linii tekstu w konsoli.
Wynik działania:
Console.WriteLine();
do
Tworzy pętlę do z możliwością określenia warunku trwania pętli.
Wynik działania:
do {
} while (true);
else
Tworzy klauzulę else, zazwyczaj używane po użyciu snipeta if .
Wynik działania:
else {
}
enum
Tworzy deklarację enumeratora o nazwie domyślnej MyEnum.
Wynik działania:
enum MyEnum {
}
equals
Tworzy puste deklaracje metod Equals i GetHashCode, które trzeba oprogramować w celu porównywania obiektów własnej klasy.
Wynik działania:
// override object.Equals
public override bool Equals(object obj)
{
//
// See the full list of guidelines at
// http://go.microsoft.com/fwlink/?LinkID=85237
// and also the guidance for operator== at
// http://go.microsoft.com/fwlink/?LinkId=85238
//
if (obj == null || GetType() != obj.GetType())
{
return false;
}
// TODO: write your implementation of Equals() here
throw new NotImplementedException();
return base.Equals(obj);
}
// override object.GetHashCode
public override int GetHashCode()
{
// TODO: write your implementation of GetHashCode() here
throw new NotImplementedException();
return base.GetHashCode();
}
Exception
Tworzy deklarację własnej klasy dziedziczącej z klasy Exception.
Wynik działania:
[global::System.Serializable] public class MyException : Exception { // // For guidelines regarding the creation of new exception types, see // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconerrorraisinghandlingguidelines.asp // and // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp07192001.asp //
public MyException() { } public MyException(string message) : base(message) { } public MyException(string message, Exception inner) : base(message, inner) { } protected MyException( System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context) { } }
for
Generuje kod pętli for. Można w nim zmieniać poszczególne elementy.
Wynik działania:
for (int i = 0; i < length; i++) {
}
foreach
Generuje kod pętli foreach.
Wynik działania:
foreach (var item in collection) {
}
forr
Generuje pętlę for z malejącym argumentem i.
Wynik działania:
for (int i = length - 1; i >= 0; i--) {
}
indexer
Tworzy kod indeksatora.
Wynik działania:
public object this[int index] { get { /* return the specified index here */ } set { /* set the specified index to value here */ } }
interface
Tworzy kod interfejsu o domyślnej nazwie IInterface.
Wynik działania:
interface IInterface {
}
invoke
Tworzy kod do odpalania zdarzenia.
Wynik działania:
EventHandler temp = MyEvent; if (temp != null) { temp(); }
iterator
Generuje kod metody zwracającej enumerator klasy.
Wynik działania:
public System.Collections.Generic.IEnumerator<ElementType> GetEnumerator() { throw new NotImplementedException(); yield return default(ElementType); }
iterindex
Tworzy kod iteratora i iteratora o określonej nazwie (w tym wypadku MyView) z użyciem dodatkowej klasy MyViewIterator.
Wynik działania:
public MyViewIterator MyView
{
get
{
return new MyViewIterator(this);
}
}
public class MyViewIterator
{
readonly MyOuterClass outer;
internal MyViewIterator(MyOuterClass outer)
{
this.outer = outer;
}
// TODO: provide an appropriate implementation here
public int Length { get { return 1; } }
public ElementType this[int index]
{
get
{
//
// TODO: implement indexer here
//
// you have full access to MyOuterClass privates
//
throw new NotImplementedException();
return default(ElementType);
}
}
public System.Collections.Generic.IEnumerator<ElementType> GetEnumerator()
{
for (int i = 0; i < this.Length; i++)
{
yield return this[i];
}
}
}
lock
Tworzy blok kodu lock.
Wynik działania:
lock (this) {
}
mbox
Tworzy kod do pokazania okna dialogowego.
Wynik działania:
MessageBox.Show("Test");
namespace
Tworzy deklarację przestrzeni nazw.
Wynik działania:
namespace MyNamespace {
}
prop
Tworzy deklarację właściwości klasy.
Wynik działania:
public int MyProperty { get; set; }
propa
public static int GetMyProperty(DependencyObject obj)
{
return (int)obj.GetValue(MyPropertyProperty);
}
public static void SetMyProperty(DependencyObject obj, int value)
{
obj.SetValue(MyPropertyProperty, value);
}
// Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.RegisterAttached("MyProperty", typeof(int), typeof(ownerclass), new UIPropertyMetadata(0));
propdp
public int MyProperty
{
get { return (int)GetValue(MyPropertyProperty); }
set { SetValue(MyPropertyProperty, value); }
}
// Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty", typeof(int), typeof(ownerclass), new UIPropertyMetadata(0));
propg
Tworzy deklarację właściwości publiczną, ale z możliwością zapisu z poziomu klasy.
Wynik działania:
public int MyProperty { get; private set; }
sim
Tworzy statyczną metodę wejściową Main z argumentami zwracającą wynik działania programu.
Wynik działania:
static int Main(string[] args) {
return 0; }
struct
Tworzy deklarację struktury.
Wynik działania:
struct MyStruct {
}
svm
Tworzy deklarację metody wejściowej statycznej Main z argumentami, nie zwracającą wartości.
Wynik działania:
static void Main(string[] args) {
}
switch
Tworzy kod bloku switch. Ciekawostka: jeżeli podamy jako switch_on np. zmienną typu wyliczeniowego, to
zostaną utworzone bloki switch dla każdej wartości tego enumeratora.
Wynik działania:
switch (switch_on) { default: }
try
Tworzy blok kodu try-catch do przechwytywania wyjątków.
Wynik działania:
try {
} catch (Exception) {
throw; }
tryf
Tworzy blok try-finally.
Wynik działania:
try {
} finally {
}
unsafe
Tworzy blok do wykonywania niebezpiecznego kodu.
Wynik działania:
unsafe {
}
using
Tworzy blok using do okreslenia jaki zasób będzie używany tylko w obrębie tego bloku.
Wynik działania:
using(resource) {
}
while
Tworzy deklarację pętli while.
Wynik działania:
while (true) {
}
No i to by było na tyle. Mam nadzieję, że te lista okaże się przydatna. Oprócz tych snippetów ze stron Microsoftu można ściągnąć więcej innych snippetów. Jednak powyższe są najczęściej używane. Dodatkowo można pisać własne.
