S=Soru
C=Cevap
S - 1 : DllImport niteliğini neden
çalıştıramıyorum?
C - 1 : DllImport ile işaretlenen bütün metotlar public
static extern olarak bildirilmelidir.
S - 2 : Yazdığım switch ifadeleri farklı
bir biçimde çalışıyor. Neden?
C - 2 : C# case blokları için "explicit fall through"
özelliğini desteklemez. Buna göre aşağıdaki kod parçası geçersizdir ve
C#'ta derlenemez.
switch(x)
{
case 0:
// bir şeyler yap
case 1:
// 0 case'indekine ek olarak birşeyler daha yap
default:
// 0 ve 1 durumlarına ek olarak birşeyler daha yap
break;
}
Yukarıdaki kodun verdiği etkiyi C# ile aşağıdaki gibi
gerçekleştirrebiliriz. (Case' ler arasındaki akışın açıkça
belirtildiğine dikkat edin!)
class Test
{
public static **** Main()
{
int x = 3;
switch(x)
{
case 0:
// bir şeyler yap
goto case 1;
case 1:
// 0 case'indekine ek olarak birşeyler daha yap
goto default;
default:
// 0 ve 1 durumlarına ek olarak birşeyler daha yap
break;
}
}
}
S - 3: const ve static readonly
arasındaki farklar nelerdir?
C - 3 : static readonly elemanlar bulundukları sınıfın üye
elemanları tarafından değiştirilebilir(!)* fakat const olan üye
elamanlar asla değiştirilemez ve derleme zamanı sabiti olarak ilk
değerleri verilmelidir.
[size=9]static readonly üye elemanlarının değiştirilebilmesini biraz
açacak olursak* static readonly üyeyi içeren sınıf bu üyeyi aşağıdaki
durumlarda değiştirebilir :
- değişken ilk değer verilen durumda
- static yapıcı metotlar içinde
S - 4 : trace ve asssert
komutlarını nasıl gerçekleyebilirim?
C - 4 : Metotlarla birlikte Conditional niteliğini
kullanarak gerçekleyebiliriz.
class Debug
{
[conditional("TRACE")]
public **** Trace(string s)
{
Console.WriteLine(s);
}
}
class MyClass
{
public static **** Main()
{
Debug.Trace("hello");
}
}
Yukarıdaki örnekte Debug.Trace() metodu ancak ve ancak TRACE
önişlemci seöbolü tanımlanmışsa çağrılacaktır. Komut satırından ön
işlemci sembollerini tanımlamak için /D parametresi kullanılabilir.
Conditional niteliği ile bildirilen metotların geri dönüş değerinin ****
olma zorunluluğu vardır.
S - 5 : C#'ta dll oluşturmak
için ne yapmalıyım?
C - 5 : Derleyicinin /target:library argümanını kullanmanız
gerekir.
S - 6 : checked isimli bir
değişken tanımladığımda neden derleme zamanında "syntax error" hatası
alıyorum?
C - 6 : Çünkü checked C#'ta bir anahtar sözcüktür.
S - 7 : Bir yapıcı metot içinde
aşırı yüklenmiş başka bir yapıcı metot nasıl çağrılır (this() ve
yapıcımetotadı() şeklindeki çağrımlar derlenmiyor)?
C - 7 : Diğer bir yapıcı metot aşağıdaki gibi çağrılabilir.
class B
{
B(int i)
{ }
}
class C : B
{
C() : base(5) // B(5) i çağırır.
{ }
C(int i) : this() // C() yi çağırır.
{ }
public static **** Main() {}
} S - 8 :
C#'ta Visual J++ ta bulunan instanceof operatörünün karşılığı varmıdır?
C - 8 : Evet* is operatörü bunun karşılığıdır.
Kullanımı aşağıdaki gibidir :
ifade is tür
S - 9 : C#'ta enum sabitleri
nasıl kullanılır.
C - 9 : enum türlerinin kullanımına bir örnek :
namespace Foo
{
enum Colors
{
BLUE*
GREEN
}
class Bar
{
Colors color;
Bar() { color = Colors.GREEN;}
public static **** Main() {}
}
}
S - 10 : Geri dönüş değeri
olmayan bir metot bildirimi yaptığımda neden (CS1006) hatası almaktayım?
C - 10 : Bir metodun geri dönüş değerini yazmadan
bildirirseniz derleyici onu sanki bir yapıcı metot bildiriyormuşsunuz
gibi davranır. O halde geri dönüş değeri olmayan bir metot bildirimi
için **** anahtar sözcüğünü kullanın. Aşağıda bu iki kullanıma örnek
verilmiştir.
// Bu bildirim CS1006 hatası verir.
public static staticMethod (mainStatic obj)
// Bu metot ise istenildiği gibi çalışır
public static **** staticMethod (mainStatic obj)
S - 11 : Her birinde farklı
Main() metodu olan birden fazla kaynak kod dosyam var: derleme sırasında
hangi Main() metodunun kullanılacağını nasıl bildirebilirim?
C - 11 : Programınızın giriş noktası(metodu) Main isimli
herhangi bir parametre almayan yada string türünden bir dizi parametresi
alan geri dönüş değeri **** yada int olan static bir metot olmalıdır.
C# derleyicisi programınızda birden fazla Main metodu
bildirmenize izin verir fakat hangi Main() metodunu kullanacağınızı
derleme zamanında bildirmeniz gerekir. Main() metodunu belirtirken Main
metodunun bulunduğu sınıfın tam yolunu belirtmeniz gerekir. Komut
satırından kullanılan /main argümanı bu işe yarar.(Örn : csc
/main:MainSınıfı *.cs)
S - 12 : Console.WriteLine()
metodu bir string içinde NULL karakteri gördüğünde ekrana yazma işlemini
durdururmu?
C - 12 : Çalışma zamanı için string türleri NULL ile
sonlandırılmış türler değildir. Dolayısıyla bir string içine NULL
karakteri gömebilirsiniz. Console.WriteLine() ve buna benzer metotlar
string değişkeninin sonuna kadar işlem yaparlar.
S - 13: C# ta "Multicast
Delegate"(çoklu temsilciler) bildirmek mümkünmüdür* mümkünse sentaksı
nasıldır?
C - 13 : Bütün temsilciler varsayılan olarak multicast
olarak bildirilir. Dolayısıyla Visual J++ taki gibi ayrıca multicast
anahtar sözcüğü yoktur.
S - 14:
Delegate/MulticastDelegate (Temsilciler) nasıl bildirilir?
C - 14 : C# ta temsilci bildirimi için sadece bir
parametreye ihtiyacımız vardır : metot adresi. Diğer dillerden farklı
olarak C# ta metodun adresi aynı zamanda bu metodun hangi nesne
üzerinden de çağrılacağını tutabilir* diğer dillerde ise temsilcilern
temsil etttiği metodu çağırabilmek için ayrıca nesnelere ihtiyaç
duyulur. Örneğin System.Threading.ThreadStart() metodunun kullanımına
bakalım.
Foo MyFoo = new Foo();
ThreadStart del = new ThreadStart(MyFoo.Baz);
Bu* static ve instance metotlarının aynı sentaks ile
çağrılabileceğini göstermektedir.
S - 15: Yaptığım windows pencere
uygulamasını her çalıştırdığımda neden pop up şeklinde konsol ekranı
gösteriliyor.
C - 15 : Proje ayarlarında "Target Type" özelliğinin Console
Application yerine Windows Application olduğuna emin olun. Eğer komut
satırı derleyicisini kullanıyorsanız /target:exe argümanı yerine
/target:winexe argümanını kullanın.
S - 16: Gereksiz çöp
toplayısınıcı(Garbage Collection) zorla çağırmanın bir yolu var mı?
C - 16 : Evet; Bütün referasnları null değer atayın ve
System.GC.Collect() statik metodunu çağırın.
Yıkılması(destruct) gereken nesneleriniz var ve GC nin bunu
yapmadığını düşünüyorsanız nesneleri null değere atayarak onların
sonlandırıcı metotlarının çağrılmasını sağlayın ver ardından
System.GC.RunFinalizers() metodunu çağırın
S - 17: C#* C dilindeki
makroları destekliyormu?
C - 17 : Hayır* C# ta makro yoktur.
__LINE__ ve __FILE__ gibi C dilinde önceden tanımlanmış bazı
makroların System.Diagnostics isim alanındaki StackTrace ve StackFrame
gibi COM+ ile ilgili sınıflardan elde edilebileceğini unutmayın. Fakat
bunlar sadece Debug moddaki derleme için çalışacaktır
C=Cevap
S - 1 : DllImport niteliğini neden
çalıştıramıyorum?
C - 1 : DllImport ile işaretlenen bütün metotlar public
static extern olarak bildirilmelidir.
S - 2 : Yazdığım switch ifadeleri farklı
bir biçimde çalışıyor. Neden?
C - 2 : C# case blokları için "explicit fall through"
özelliğini desteklemez. Buna göre aşağıdaki kod parçası geçersizdir ve
C#'ta derlenemez.
switch(x)
{
case 0:
// bir şeyler yap
case 1:
// 0 case'indekine ek olarak birşeyler daha yap
default:
// 0 ve 1 durumlarına ek olarak birşeyler daha yap
break;
}
Yukarıdaki kodun verdiği etkiyi C# ile aşağıdaki gibi
gerçekleştirrebiliriz. (Case' ler arasındaki akışın açıkça
belirtildiğine dikkat edin!)
class Test
{
public static **** Main()
{
int x = 3;
switch(x)
{
case 0:
// bir şeyler yap
goto case 1;
case 1:
// 0 case'indekine ek olarak birşeyler daha yap
goto default;
default:
// 0 ve 1 durumlarına ek olarak birşeyler daha yap
break;
}
}
}
S - 3: const ve static readonly
arasındaki farklar nelerdir?
C - 3 : static readonly elemanlar bulundukları sınıfın üye
elemanları tarafından değiştirilebilir(!)* fakat const olan üye
elamanlar asla değiştirilemez ve derleme zamanı sabiti olarak ilk
değerleri verilmelidir.
[size=9]static readonly üye elemanlarının değiştirilebilmesini biraz
açacak olursak* static readonly üyeyi içeren sınıf bu üyeyi aşağıdaki
durumlarda değiştirebilir :
- değişken ilk değer verilen durumda
- static yapıcı metotlar içinde
S - 4 : trace ve asssert
komutlarını nasıl gerçekleyebilirim?
C - 4 : Metotlarla birlikte Conditional niteliğini
kullanarak gerçekleyebiliriz.
class Debug
{
[conditional("TRACE")]
public **** Trace(string s)
{
Console.WriteLine(s);
}
}
class MyClass
{
public static **** Main()
{
Debug.Trace("hello");
}
}
Yukarıdaki örnekte Debug.Trace() metodu ancak ve ancak TRACE
önişlemci seöbolü tanımlanmışsa çağrılacaktır. Komut satırından ön
işlemci sembollerini tanımlamak için /D parametresi kullanılabilir.
Conditional niteliği ile bildirilen metotların geri dönüş değerinin ****
olma zorunluluğu vardır.
S - 5 : C#'ta dll oluşturmak
için ne yapmalıyım?
C - 5 : Derleyicinin /target:library argümanını kullanmanız
gerekir.
S - 6 : checked isimli bir
değişken tanımladığımda neden derleme zamanında "syntax error" hatası
alıyorum?
C - 6 : Çünkü checked C#'ta bir anahtar sözcüktür.
S - 7 : Bir yapıcı metot içinde
aşırı yüklenmiş başka bir yapıcı metot nasıl çağrılır (this() ve
yapıcımetotadı() şeklindeki çağrımlar derlenmiyor)?
C - 7 : Diğer bir yapıcı metot aşağıdaki gibi çağrılabilir.
class B
{
B(int i)
{ }
}
class C : B
{
C() : base(5) // B(5) i çağırır.
{ }
C(int i) : this() // C() yi çağırır.
{ }
public static **** Main() {}
} S - 8 :
C#'ta Visual J++ ta bulunan instanceof operatörünün karşılığı varmıdır?
C - 8 : Evet* is operatörü bunun karşılığıdır.
Kullanımı aşağıdaki gibidir :
ifade is tür
S - 9 : C#'ta enum sabitleri
nasıl kullanılır.
C - 9 : enum türlerinin kullanımına bir örnek :
namespace Foo
{
enum Colors
{
BLUE*
GREEN
}
class Bar
{
Colors color;
Bar() { color = Colors.GREEN;}
public static **** Main() {}
}
}
S - 10 : Geri dönüş değeri
olmayan bir metot bildirimi yaptığımda neden (CS1006) hatası almaktayım?
C - 10 : Bir metodun geri dönüş değerini yazmadan
bildirirseniz derleyici onu sanki bir yapıcı metot bildiriyormuşsunuz
gibi davranır. O halde geri dönüş değeri olmayan bir metot bildirimi
için **** anahtar sözcüğünü kullanın. Aşağıda bu iki kullanıma örnek
verilmiştir.
// Bu bildirim CS1006 hatası verir.
public static staticMethod (mainStatic obj)
// Bu metot ise istenildiği gibi çalışır
public static **** staticMethod (mainStatic obj)
S - 11 : Her birinde farklı
Main() metodu olan birden fazla kaynak kod dosyam var: derleme sırasında
hangi Main() metodunun kullanılacağını nasıl bildirebilirim?
C - 11 : Programınızın giriş noktası(metodu) Main isimli
herhangi bir parametre almayan yada string türünden bir dizi parametresi
alan geri dönüş değeri **** yada int olan static bir metot olmalıdır.
C# derleyicisi programınızda birden fazla Main metodu
bildirmenize izin verir fakat hangi Main() metodunu kullanacağınızı
derleme zamanında bildirmeniz gerekir. Main() metodunu belirtirken Main
metodunun bulunduğu sınıfın tam yolunu belirtmeniz gerekir. Komut
satırından kullanılan /main argümanı bu işe yarar.(Örn : csc
/main:MainSınıfı *.cs)
S - 12 : Console.WriteLine()
metodu bir string içinde NULL karakteri gördüğünde ekrana yazma işlemini
durdururmu?
C - 12 : Çalışma zamanı için string türleri NULL ile
sonlandırılmış türler değildir. Dolayısıyla bir string içine NULL
karakteri gömebilirsiniz. Console.WriteLine() ve buna benzer metotlar
string değişkeninin sonuna kadar işlem yaparlar.
S - 13: C# ta "Multicast
Delegate"(çoklu temsilciler) bildirmek mümkünmüdür* mümkünse sentaksı
nasıldır?
C - 13 : Bütün temsilciler varsayılan olarak multicast
olarak bildirilir. Dolayısıyla Visual J++ taki gibi ayrıca multicast
anahtar sözcüğü yoktur.
S - 14:
Delegate/MulticastDelegate (Temsilciler) nasıl bildirilir?
C - 14 : C# ta temsilci bildirimi için sadece bir
parametreye ihtiyacımız vardır : metot adresi. Diğer dillerden farklı
olarak C# ta metodun adresi aynı zamanda bu metodun hangi nesne
üzerinden de çağrılacağını tutabilir* diğer dillerde ise temsilcilern
temsil etttiği metodu çağırabilmek için ayrıca nesnelere ihtiyaç
duyulur. Örneğin System.Threading.ThreadStart() metodunun kullanımına
bakalım.
Foo MyFoo = new Foo();
ThreadStart del = new ThreadStart(MyFoo.Baz);
Bu* static ve instance metotlarının aynı sentaks ile
çağrılabileceğini göstermektedir.
S - 15: Yaptığım windows pencere
uygulamasını her çalıştırdığımda neden pop up şeklinde konsol ekranı
gösteriliyor.
C - 15 : Proje ayarlarında "Target Type" özelliğinin Console
Application yerine Windows Application olduğuna emin olun. Eğer komut
satırı derleyicisini kullanıyorsanız /target:exe argümanı yerine
/target:winexe argümanını kullanın.
S - 16: Gereksiz çöp
toplayısınıcı(Garbage Collection) zorla çağırmanın bir yolu var mı?
C - 16 : Evet; Bütün referasnları null değer atayın ve
System.GC.Collect() statik metodunu çağırın.
Yıkılması(destruct) gereken nesneleriniz var ve GC nin bunu
yapmadığını düşünüyorsanız nesneleri null değere atayarak onların
sonlandırıcı metotlarının çağrılmasını sağlayın ver ardından
System.GC.RunFinalizers() metodunu çağırın
S - 17: C#* C dilindeki
makroları destekliyormu?
C - 17 : Hayır* C# ta makro yoktur.
__LINE__ ve __FILE__ gibi C dilinde önceden tanımlanmış bazı
makroların System.Diagnostics isim alanındaki StackTrace ve StackFrame
gibi COM+ ile ilgili sınıflardan elde edilebileceğini unutmayın. Fakat
bunlar sadece Debug moddaki derleme için çalışacaktır